分糖果

分析

  • 代码主要包括2个方面,一是判断每个人的糖果是否相同
  • 二是分糖果的过程:用s1数组来表示存储减半的糖果数,判断糖果是否满足奇数,满足就补糖果
  • 以下就是以4个人为例,箭头表示将糖果分给左边的同学,用数组表示就是将s1[i]手中的糖果分给s[i-1],注意数组的第一位s1[1]要给数组的最后一位s[4];逻辑大体是这样。

image-20220120204926530

  1. #include<stdio.h>
  2. #define N 101
  3. int main()
  4. {
  5. int n,i,j,sign=0,sum=0,k;
  6. int s[N],s1[N];
  7. scanf("%d",&n);
  8. for(i=1;i<=n;i++){
  9. scanf("%d",&s[i]);
  10. }
  11. while(1){
  12. k=1;
  13. for(i=2;i<=n;i++){//判断每个人的糖果数是否相等
  14. if(s[1]==s[i]){
  15. k++;
  16. }
  17. if(k==n){
  18. sign=1;
  19. }
  20. }
  21. for(i=1;i<=n;i++){
  22. s[i]=s[i]/2;
  23. s1[i]=s[i];//s1作为糖果一半的存储
  24. }
  25. for(i=1;i<=n;i++){//分糖
  26. if(i==1){
  27. s[n] += s1[i];
  28. if(s[n]%2 != 0){
  29. s[n] += 1;
  30. sum++;
  31. }
  32. }else{
  33. s[i-1] += s1[i];
  34. if(s[i-1]%2!=0){//判断奇偶
  35. s[i-1] += 1;
  36. sum++;
  37. }
  38. }
  39. }
  40. if(sign==1){//标志
  41. break;
  42. }
  43. }
  44. printf("%d",sum);
  45. return 0;
  46. }

来源

点赞(0)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论