当前位置:   article > 正文

分糖果C语言_c语言 四个小朋友分糖果

c语言 四个小朋友分糖果

分析:我们假设有n个小朋友,我们可以以每一个小朋友作为开头传递一次,我们将每一种情况栓出来,在判断哪种代价最小,就输出哪种

例子:下面这种情况是把1当成开头,结果是6

把2换成第一个,结果就是4

代码如下:

  1. #include <stdio.h>
  2. #include <math.h>
  3. int min(int a,int b){
  4. return a<b?a:b;
  5. }
  6. int f(int num[],int k,int n,int avg,int sum1[]){
  7. int sum=0,m=1,i;
  8. while(m<=n){
  9. m++;
  10. int x=num[k]-avg;
  11. sum+=abs(x);
  12. num[k]=avg;
  13. k++;
  14. if(k==n+1)k=1;
  15. num[k]+=x;
  16. }
  17. for(i=1;i<=n;i++){
  18. num[i]=sum1[i];
  19. }
  20. return sum;
  21. }
  22. int main(){
  23. int m,n,j,i,sum=0,ch=1;
  24. scanf("%d",&n);
  25. int num[n+1],sum1[n+1];
  26. for(i=1;i<=n;i++){
  27. scanf("%d",&num[i]);
  28. sum1[i]=num[i];//用一个数组来保存num数组,因为我们之后要改变num数组,所以要用sum1数组来还原num
  29. sum+=num[i];
  30. }
  31. int avg=sum/n;//计算平均数
  32. for(i=1;i<=n;i++){//列举出从每一个小朋友开头的情况
  33. int s=f(num,i,n,avg,sum1);
  34. if(i==1){
  35. m=s;
  36. }
  37. else{
  38. m=min(m,s);//找出最小的代价
  39. }
  40. }
  41. printf("%d",m);
  42. return 0;
  43. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/427664
推荐阅读
相关标签
  

闽ICP备14008679号