解题思路:
把围成一个圈的孩子,拆成一条直线,用数组储存,所以第一个孩子分完糖果又接受第二个孩子的一半糖果,本质上为本质就是失去一半糖果,

加上后一个人的一半糖果,当到最后一个人的时候,接收自己一半 糖果和第一个人 的一半糖果,

注意事项:
要明白每一个数的作用。
参考代码:

int num[100] = {0};                                 //初始化一个数组

    int n = 0;//n为人数

    cin >> n;

    int x;                                      //x为输入的分发糖果数

    int sum = 0;                       //用来记录老师多发的糖果数

    for (int i = 0; i < n; i++) {

        cin >> x;

        num[i] = x;

    }  

    int temp = 0 ;         //后面用来记录num[0]

    int w = n;            

    while (w) {

        for (int i = 0; i < n; i++)//此步用来判断每个数组是否为偶数,不是的话加一,sum加一

        {              

        if (!(num[i] % 2 == 0))

         {          

            num[i] = num[i] + 1;

            sum++;

        }

        }

        temp = num[0];                               //记录num[0]的值

       int h = num[0];

        for (int i = 0; i < n; i++) {                                                                        //计算分完一次各自的糖果数,本质就是失去一半糖果,

                                                                                                                          // 加上后一个人的一半糖果,当到最后一个人的时候,接收自己一半                                   if (i < n - 1)  num[i] = (num[i] + num[i + 1]) / 2;                  //   糖果和第一个人 的一半糖果,用temp记录的那个  

                else { num[i] = (num[i] + temp)/2; }

                if (h == num[i]) { w--; }          //记录是否都相等,当每个人糖果相等,w为0                                                                       

           

               

        } 

        if (!w == 0) { w = n; }      //不为0便重来,为0结束循环

    }

cout << sum << endl;    //得出结果


return 0;

}


点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论