/*
2. 10000から999999のランダムな自然数を1000コ生成し、各数値と平均値との差をもとめ、その差が小さい順にその数値を　  表示するプログラムを作成せよ。また、各数値は何番目に生成したかも表示する。
 
　　例)1番目に平均との差が小さい数は680番目の数69383です。 平均値との差は10.505です。
*/
#include <stdlib.h>
#include <stdio.h>

typedef struct{
  int idx;
  int n;
  double sb;
}et;

int et_comp(void* av, void* bv){
  et* a = (et*)av;
  et* b = (et*)bv;
  return a->sb == b->sb ? 0 : a->sb < b->sb ? -1 : 1;
}

int rand2(int s, int e){
   return s + (int)(rand()*(e-s+1.0)/(1.0+RAND_MAX));
}

int main(){
  const int sz=1000;
  int i;
  et v[sz];
  double sum=0;
  for(i=0; i<sz; i++){
     int n = rand2(10000,999999);
     v[i].idx=i;
     v[i].n = n;
     sum += n;
  }
  double avg=sum/sz;
  for(i=0; i<sz; i++){
     v[i].sb = fabs(avg-v[i].n);
  }
  qsort(v, sz, sizeof(et), et_comp);
  //for(i=0; i<sz; i++){
  for(i=0; i<sz && i<100; i++){ //100行制限
     printf("%d番目に平均との差が小さい数は%d番目の数%dです。 平均値との差は%fです。\n", i+1, v[i].idx+1, v[i].n, v[i].sb);
  }
  return 0;
}
