手順は、まず平均値を求め、その後にもっと近いデータを探す。

もっと近いデータを探す際、差がより小さいならばそのデータを選択するが、差がおなじの場合はさらにデータ値が小さいものを選択する。

C初級セミナー

解答例

/***
 *** いくつかの整数値の中で、それらの平均に最も近いデータを表示する
 *** 同じデータが複数ある場合は小さいデータを表示する
 ***/
#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;
}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS