我需要找到与给定数字中的平均值最接近的(和次要的)数字。例如:
如果给定的数字是1,2,3,4,5,则平均值为3,最接近的数字为2和4,但是次要数字为2,因此结果应为2。
或者,如果给定的数字是1,325,350,299,则平均值为243.75,因此最接近的数字为299。
int best = a[0];
for (i = 1; i < count; ++i)
best = abs(a[i] - x) < abs(best - x) ? a[i] : best;
答案 0 :(得分:2)
你的代码差不多......你只需要检查距离x
的平均距离是否与最佳距离相同,但是在{{1不是......
best
(你必须通过这些值来计算平均值,所以你的整体算法将是O(n)。所以你正在使用的额外迭代并不会降低整体的大O效率。 ......一切都好。)
答案 1 :(得分:-1)
这并不难,你应该能够做到这一点。我假设这是你学校作业的问题而且你心情不好
int closest(int* array, int size){
//Calculating sum for finding average first
double sum = 0.0;
for (int i=0; i< size; i++){
sum+= array[i]*1.0;
}
//Here is our average
double average = sum/size;
//Assuming initial answer is very huge so that every other comparison is less than this
int answer = 100000000;
for (int i=0; i< size; i++){
//Finiding the difference for current element
double temp = abs(array[i]-average);
double temp1 = abs(answer - average);
//If current difference is less than previous one that replace the previous answer
if (temp < temp1) answer = array[i];
//If they are equal then accept the minor one
else if (temp == temp1){
if (array[i]< answer) answer = array[i];
}
}
return answer;
}
P.S。在这里问这样的问题是不好的做法。您应该首先尝试它,然后在尝试时发布您的问题。