fork download
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5. void show(int tb[],size_t size)
  6. {
  7. for(size_t i=0;i<size;++i) cout<<(","+!i)<<tb[i];
  8. cout<<endl;
  9. }
  10.  
  11. void divide(int tb[],size_t size,int ext)
  12. {
  13. show(tb,size);
  14. while(ext>0)
  15. {
  16. double avg=0;
  17. for(size_t i=0;i<size;++i) avg+=tb[i];
  18. avg/=size;
  19. size_t imax=0;
  20. double dif=0,vmax=0;
  21. for(size_t i=0;i<size;++i)
  22. {
  23. double tmp=fabs(avg-tb[i]);
  24. dif+=tmp;
  25. if((!i)||(tmp>vmax))
  26. {
  27. vmax=tmp;
  28. imax=i;
  29. }
  30. }
  31. int chg=(int)round(max(1.0,dif*ext/(size*size)));
  32. ext-=chg;
  33. if(tb[imax]>avg) tb[imax]-=chg; else tb[imax]+=chg;
  34. show(tb,size);
  35. }
  36. }
  37.  
  38. int main()
  39. {
  40. int tb[]={10,5,3};
  41. divide(tb,sizeof(tb)/sizeof(*tb),7);
  42. return 0;
  43. }
Success #stdin #stdout 0s 4200KB
stdin
Standard input is empty
stdout
10,5,3
4,5,3
4,4,3