คำชี้แจงปัญหา
ด้วยอาร์เรย์ "arr" ขนาด n และองค์ประกอบ x ภารกิจคือการค้นหาจำนวนองค์ประกอบขั้นต่ำที่จะเพิ่มในอาร์เรย์เพื่อให้ค่ามัธยฐานเท่ากับ x
ค่ามัธยฐานในอาร์เรย์ที่มีความยาว n คือองค์ประกอบที่มีหมายเลขตำแหน่ง (n-1)/2 หลังจากที่เราจัดเรียงองค์ประกอบในลำดับที่ไม่ลดลง ตัวอย่างเช่น ค่ามัธยฐานของอาร์เรย์ด้านล่างคือ 20 −
arr1[] ={10, 20, 30, 40}
ถ้า arr[] ={1, 2, 3} และ x =4 เราต้องบวกตัวเลข 4 ตัว นั่นคือ {4, 5, 5, 5} ในอาร์เรย์เพื่อให้ค่ามัธยฐานเท่ากับ 4
อัลกอริทึม
อัลกอริทึมนั้นง่ายมาก เราต้องบวกเลข x หนึ่งตัวเข้าไปในอาร์เรย์จนค่ามัธยฐานของอาร์เรย์เท่ากับ x
ตัวอย่าง
#include <iostream>
#include <algorithm>
using namespace std;
int minNumbersToBeAdded(int *arr, int n, int x){
sort(arr, arr + n);
int cnt = 0;
while (arr[(n - 1)/2] != x) {
arr[n] = x;
++n;
sort(arr, arr + n);
++cnt;
}
return cnt;
}
int main(){
int arr[20] = {1, 2, 3};
int x = 4;
int n = 3;
cout << "Minimum numbers to be added = " << minNumbersToBeAdded(arr, n, x) << endl;
return 0;
} ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -
Minimum numbers to be added = 4