解题思路:
将每个人糖果的一半分给下一个人,首先自然而然想到用数组记录每人的糖果数,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分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复