解题思路:
将每个人糖果的一半分给下一个人,首先自然而然想到用数组记录每人的糖果数,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 人评分
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:732 |
C语言考试练习题_排列 (C语言代码)浏览:1326 |
C语言训练-排序问题<1> (C++代码)浏览:604 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:512 |
【明明的随机数】 (C++代码)浏览:781 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:576 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:609 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:682 |
关于C语言变量位置的问题浏览:273 |
简单的a+b (C语言代码)浏览:419 |
Spperman 2019-03-05 20:45:17 |
好久没看网站了,这个题我刚学的时候想啦好久,现在看着就好多了,多练习比只看书有效果,