读书人

全国计算机编程大赛复赛题的一个有关问

发布时间: 2012-02-10 21:27:41 作者: rapoo

全国计算机编程大赛复赛题的一个问题
在某次实弹射击训练中,班长将十个战士围成一圈发子弹。首先,班长给第一个战士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]);
}

[解决办法]
这么简单的题目,还全国大赛,晕倒了,我可不要参加这样子的大赛

读书人网 >VC/MFC

热点推荐