全国计算机编程大赛复赛题的一个问题
在某次实弹射击训练中,班长将十个战士围成一圈发子弹。首先,班长给第一个战士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死循环搞的。
语法没有问题 到底是哪里错了 谁能告诉偶一下 谢谢啦~!
[解决办法]
全国计算机编程大赛复赛是什么样的一个比赛
[解决办法]
答案是17对吧
[解决办法]
这个班长有病,病得不轻。
[解决办法]
#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 ';
int j, k;
while(1)
{
//检查是否为奇数
for (i=0; i < 10;i++)
{
if (shuru[i][1]%2!=0)
shuru[i][1]++;
}
//将上个人手中的子弹分一半给自己,并将自己的子弹分出去
for (i=0; i < 10; i++)
{
if(i > 0) j = k;
k = shuru[i][1];
if(i == 0)
shuru[i][1] = shuru[9][1]/2 + shuru[i][1] /2;
else
shuru[i][1] = j / 2 + shuru[i][1] /2;
}
cishu++;
printf( "\n%d: ", cishu);
for( i = 0; i < 10; i++)
{
printf( "%d ", shuru[i][1]);
}
for( i = 1; i < 10; i++)
{
if (shuru[0][1] != shuru[i][1])
break;
}
if (i == 10 || cishu > = 100)
break;
}
printf( "\n共交换了%d次!\n ",cishu);
printf( "每个人手里的字弹数都是%d\n ",shuru[0][1]);
}
[解决办法]
这么简单的题目,还全国大赛,晕倒了,我可不要参加这样子的大赛