C语言 10人分糖
答案:2 悬赏:10 手机版
解决时间 2021-04-14 10:38
- 提问者网友:绫月
- 2021-04-13 22:20
10个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为12,2,8,22,16,4,10,6,14,20。然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为奇数的人,再向老师补要一块,问经过多少次调整后,大家的糖块一样多,且每人多少块。
我的程序
#include
main()
{
int a[10]={12,2,8,22,16,4,10,6,14,20},i,k=1;
while(1)
{
for(i=0;i<9;i++)
if(a[i]!=a[1+i])
break;
if(i==9)
{
for(i=0;i<9;i++)
printf("%d ",a[i]);
printf("\n");
printf("循环的次数为:%d\n",k);
return;
}
for(i=0;i<9;i++)
{
a[i]=a[i]/2;
a[i+1]+=a[i]/2;
if(a[i+1]%2!=0)
a[i+1]+=1;
if(a[i]%2!=0)
a[i]+=1;
}
a[9]=a[9]/2;
a[0]+=a[9]/2;
if(a[0]%2!=0)
a[0]+=1;
if(a[9]%2!=0)
a[9]+=1;
k++;
}
}
最佳答案
- 五星知识达人网友:傲气稳了全场
- 2021-04-13 23:59
所有小孩同时把自己的糖果分一半给右边的小孩。注意这里是同时,并不是第一个小孩把糖给第二个小孩以后,第二个小孩再把他现有糖的一半给下一个小孩。
#include
int main()
{
int A[]={12, 2, 8, 22, 16, 4, 10, 6, 14, 20},
N = sizeof(A)/sizeof(int),
steps;
int i, prev, temp;
for(steps=0; ;steps++)
{
//判断是否全部相等
for(i=1; i
if(A[i]!=A[0])break;
if(i==N)break;
//模拟
prev = A[N-1]/2; //记录前一个小孩糖数的一半
for(i=0; i
{
temp = A[i]/2;
A[i] = temp + prev;
A[i] += A[i]&1;
prev = temp;
}
}
printf("Value: %d\nSteps: %d", A[0], steps);
}// Output
Value: 18
Steps: 16
全部回答
- 1楼网友:长青诗
- 2021-04-14 00:59
没看懂那段程序,我自己写了段 你看看吧 有问题再来问我哈
#include
int main()
{
int i=1,j,n; //i为糖数目,j为第几次分糖,n为分糖时的数目
while(i+=7) //因为第一次分糖减糖数1后要是7的倍数,所以每次假设加上7
{
n=i; //n=假设的糖数
for(j=1;;++j) //开始分糖,j从1开始递增
{
n-=j; //每次开始减j个糖
if(n<=0) break; // =0为分糖成功,<0就失败了
if(n%7!=0) break; //不能整除7就每次分1/7的糖,所以要整除7
n-=(n/7); //分1/7的糖
}
if(n==0) break; // =0 分糖成功
}
printf("%d,%d\n", j, i); //输出分糖次数和糖数 分糖次数即人数
return 0;
}
最后答案人数为6,糖数为36
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯