全国计算机编程大赛复赛题的一个问题
在某次实弹射击训练中,班长将十个战士围成一圈发子弹。首先,班长给第一个战士10颗,第二个战士2颗,第三个战士8颗,第四个战士22颗,第五个战士16颗,第六个战士4颗,第七个战士10颗,第八个战士6颗,第九个战士14颗,第十个战士20颗。然后按如下方法将每个战士手中的子弹进行调整:所有的战士检查自己手中的子弹数,如果子弹数为奇数,则向班长再要一颗。然后每个战士再同时将自己手中的子弹分一半给下一个战士(第10 个战士将手中的子弹分一半给第1个战士)。问需要多少次调整后,每个战士手中的子弹数都相等?每人各有多少颗子弹?
要求输出每轮调整后各战士手中的子弹数。
我试了一下 写出的代码是这样的
#include <stdio.h>
void main()
{
int shuru[10][2]={{0,10},{1,2},{2,8},{3,22},{4,16},{5,4},{6,10},{7,6},{8,14},{9,20}};
int i=0,cishu=0,manzu='n';
for (i=0;i<=9;i++)
{
if (shuru[i][1]%2!=0)
shuru[i][1]++;
}
while(1)
{
for (i=1;i<=9;i++)
{
shuru[i][1]+=shuru[i-1][1]/2;
}
shuru[0][1]+=shuru[9][1]/2;
cishu++;
i=0;
while(i<=9)
{
if (shuru[i][1]==shuru[i+1][1])
{
shuru[i][1]=shuru[i+1][1];
i++;
if (i==9)
{
manzu=='y';
break;
}
}
else
break;
}
if (manzu=='y')
break;
}
printf("共交换了%d次!\n",cishu);
printf("每个人手里的字弹数都是%d\n",shuru[0][1]);
}
可是 。 就是不对 结果根本就输出不出来。 可能是第一个while死循环搞的。
语法没有问题 到底是哪里错了 谁能告诉偶一下 谢谢啦~!