手順は、まず平均値を求め、その後にもっと近いデータを探す。
もっと近いデータを探す際、差がより小さいならばそのデータを選択するが、差がおなじの場合はさらにデータ値が小さいものを選択する。
/***
*** いくつかの整数値の中で、それらの平均に最も近いデータを表示する
*** 同じデータが複数ある場合は小さいデータを表示する
***/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
int main(void){
const int num=10;
int data[num];
int i;
// num個のデータを読み込む
printf("Input %d data:\n",num);
for(i=0;i<num;i++)
scanf("%d",&data[i]);
// 平均値の計算
double ave=0;
for(i=0;i<num;i++)
ave+=data[i];
ave/=num;
// 平均に最も近いデータを探す
double e=DBL_MAX;
int id;
for(i=0;i<num;i++){
double e1=fabs(ave-data[i]);
if(e1<e || (e1==e && data[i]<data[id])){
e=e1;
id=i;
}
}
// 結果を表示
for(i=0;i<num;i++)
printf("%d ",data[i]);
printf("\nAverage is %f",ave);
printf("\nNearest data is %d\n",data[id]);
return 0;
}