解题思路:

将每个人糖果的一半分给下一个人,首先自然而然想到用数组记录每人的糖果数,i=1 表示从第一个开始,

其次  每人分出去一半,是同时进行,不是从一开始顺序分出一半,这是两种解法。

关于记录分出去的一半糖果数,我也是用另一个数组记录,其次就是数学与逻辑的整合啦,看代码吧!



注意事项:

此题注意理解题意要理解透彻,把过程想明白。


参考代码:

#include<stdio.h>
main()
{
     int n,i,f,m,c=0;
    int a[100],b[100];
    scanf("%d",&n);                     //输入n个人
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);             // 输入每个人的初始糖果数
    }
    while(1)
    {
        f=1;                                 // f=1,用来下面判断是否每人糖果数一致
        for(i=1;i<=n;i++)
        {
            a[i]=a[i]/2;                   //首先同时发生,先让每个人糖果数目减半
            b[i]=a[i];                      //减少的就是要分给下一个人的,用b数组记录
        }
        b[0]=b[n];                       //此处给b【0】赋予最后一个人分发的糖果数
        for(i=1;i<=n;i++)            //(i从1开始)可以使每个人得到的糖果都来源于下一个人  a[i]=a[i]+b[i-1];           

      {
            a[i]=a[i]+b[i-1];          //每一轮分糖果,每个人最后的糖果数
        }

        for(i=1;i<=n;i++)
    {
        if(a[i]%2!=0)
        {

            a[i]=a[i]+1;
            c++;                        //如果不是偶数,则c(补充的糖果数)+1
        }
    }
        for(i=1;i<n;i++)
    {
         if(a[1]!=a[i+1])
        {
           
           f=0;                  //  如果都不等于第一个人的数目,大家数目不一样,f为0,继续循环
        }
    }

    if(f==1)
    {
        break;             // 一样。则跳出while循环,输出增加糖果数目
    }
    }
    printf("%d",c);




    }



点赞(21)
 

0.0分

3 人评分

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

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

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

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

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

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

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

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

评论列表 共有 18 条评论

Spperman 5年前 回复TA
@王海迪 因为发糖果是同时进行,比如1,2,3.。。n;同时间发给下一个,b数组就是提前存储这些分发糖果的数,否则之后的小朋友手中的糖果数是在不停变化的
Spperman 5年前 回复TA
@王海迪 这应该是’减少‘的,可能打错别字了,不好意思。  意思是吧减半的糖果记录下来用来发给别人
王海迪 5年前 回复TA
b[i]=a[i];                      //较少的就是要分给下一个人的,用b数组记录
这句不懂
王海迪 5年前 回复TA
较少的就是要分给下一个人的,用b数组记录
这个解释那句不懂
Spperman 6年前 回复TA
@谁笑涡红透 最近在看书,没刷题回复的晚啦些,抱歉!
Spperman 6年前 回复TA
@谁笑涡红透 我的while判断条件一直是1就是真,只有f从1变成0,if语句中执行break才能跳出循环
谁笑涡红透 6年前 回复TA
为什么f=0就会继续循环呢?
Spperman 6年前 回复TA
不懂的地方,可以留言。