Spperman


私信TA

用户名:fan

访问量:63289

签 名:

优秀的程序员是没有女朋友的...

等  级
排  名 63
经  验 10155
参赛次数 0
文章发表 66
年  龄 19
在职情况 学生
学  校 河南师范大学
专  业 物联网

  自我简介:

单身是因为——太优秀了...

TA的其他文章

解题思路:

将每个人糖果的一半分给下一个人,首先自然而然想到用数组记录每人的糖果数,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);




    }



 

0.0分

4 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

较少的就是要分给下一个人的,用b数组记录
这个解释那句不懂
2019-03-02 10:30:41
为什么f=0就会继续循环呢?
2018-05-01 11:09:15
不懂的地方,可以留言。
2018-04-10 15:22:12