空青


私信TA

用户名:el2k

访问量:327

签 名:

等  级
排  名 22072
经  验 625
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 广州大学
专  业

  自我简介:

TA的其他文章

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

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

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

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分

1 人评分

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

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区