解题思路:
把围成一个圈的孩子,拆成一条直线,用数组储存,所以第一个孩子分完糖果又接受第二个孩子的一半糖果,本质上为本质就是失去一半糖果,
加上后一个人的一半糖果,当到最后一个人的时候,接收自己一半 糖果和第一个人 的一半糖果,
注意事项:
要明白每一个数的作用。
参考代码:
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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复