C语言分糖果

写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。

题目:

题目链接:https://www.dotcpp.com/oj/problem1431.html

题目 1431: [蓝桥杯][2014年第五届真题]分糖果

时间限制: 1Sec 内存限制: 128MB 提交: 5184 解决: 2711

题目描述
问题描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:

每个小朋友都把自己的糖果分一半给左手边的孩子。

一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。

反复进行这个游戏,直到所有小朋友的糖果数都相同为止。

你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入
程序首先读入一个整数N(2< N< 100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
2 2 4
样例输出
4

C语言解法

参考题解:https://blog.dotcpp.com/a/58037

#include 
int main()
{
    int n, count = 0, flag = 1;
    scanf("%d", &n);
    int a[n + 1];
    for (int i = 1; i < n + 1; i++)
        scanf("%d", &a[i]);
    //输入完成

    //进入循环
    while (flag)
    {
        flag = 0;
        a[0] = a[1];
        for (int i = 0; i < n; i++)
            a[i] = a[i] / 2 + a[i + 1] / 2;
        a[n] = a[n] / 2 + a[0] / 2;
        for (int i = 0; i < n + 1; i++)
            if (a[i] % 2 != 0)
            {
                a[i] += 1;count++;
            }
        for (int i = 1; i < n + 1; i++)
            if (a[i] != a[0])
                flag = 1;
    }

        printf("%d", count);

    return 0;
}


都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
C语言专栏看这 : C语言学习专栏


如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。

你可能感兴趣的:(#,无聊玩玩-C语言中文网,OJ)