求指导。。有代码
问题如下
[color=#FF0000][/color]在某次实弹射击训练中,班长将 n 个战士围成一圈发子弹。首先,班长给每个战士发不
同数量的子弹。然后按如下方法将每个战士手中的子弹进行调整:所 有的战士检查自己手中
的子弹数,如果子弹数为奇数,则向班长再要一颗。然后每个战士再同时将自己手中的子弹
分一半给下一个战士(第 n 个战士将手中的子弹分一半给第 1 个战士)。问当每个战士手中
的子弹数都相等时,共需要多少次调整,且每人各有多少颗子弹?
输入:
输入文件的第一行为战士数 N ( 0<N<50 ), 第二行为每个战士所发的子弹数
Mi(0<Mi<100).
输出:
你的输出为最少调整次数,和每人所拥有的子弹数。
输入举例:
4
5 3 4 3
输出举例:
4 6
我的代码如下[code=C/C++][/code]
#include <stdio.h>
void main()
{int flag,i,c[4],a[50],sum=0,x;
scanf("%d",&x);//输入人数//
for (i=0;i<x;i++)
scanf("%d",&a[i]);//输入子弹//
for (i=0;i<(x-1);i++)
if (a[i]!=a[i+1])
{ flag=1;
break ;
}
else flag=0;
while (flag)
{
for (i=0;i<x;i++)
c[i]=0;
for (i=0;i<x;i++)
{ if (a[i]%2!=0)/*判断是否是奇数,并分配*/
a[i]+=1;
c[i]=a[i]/2;
a[i]=c[i];
}
for (i=0;i<x;i++)
{ if (i!=(x-1))
a[i+1]+=c[i];
else a[0]+=c[i];
}
sum++;
for (i=0;i<(x-1);i++)
if (a[i]!=a[i+1])//这个循环判断子弹数是否都相等//
{ flag=1;
break ;
}
else flag=0;
}
printf("%d %d",sum,a[1]);//输出分配次数和子弹数//
}
我能输出题目的例子,但是。我试一试其他数 的时候,。,怎么没结果呢。。。顺便来请教下思路。。。上面这个是我自己写的。。嘿嘿。、、
[解决办法]
楼主思路不错,就是代码太难读了。看我的
/* 战士数:8 子弹数:1-8 结果为9 8*/#include <stdio.h>#include <stdlib.h>void main(){ int flag,i,x; int c[50],a[50]; int sum=0; printf("请输入战士的人数(1-50): "); scanf("%d",&x); //输入人数 printf("请输入每个战士准备拥有的子弹数:"); for (i=0;i<x;i++){ //输入准备分配的子弹 scanf("%d",&a[i]); } for (i=0;i<(x-1);i++) //出现分配均匀时flag=1,否则flag=0 if (a[i]!=a[i+1]){ flag=1; break ; } else flag=0; while (flag){ for (i=0;i<x;i++) //初始化每个士兵手中的子弹数为0 c[i]=0; for (i=0;i<x;i++){ //判断是否是奇数,并分配出每人一半子弹 if (a[i]%2!=0){ a[i]+=1; } c[i]=a[i]/2; a[i]=c[i]; } for (i=0;i<x;i++){ //分配入已分配出的子弹 if (i!=(x-1)) a[i+1]+=c[i]; else a[0]+=c[i]; } sum++; //统计分配次数 for (i=0;i<(x-1);i++){ //判断每次分配后是否满足条件,若否则循环 if (a[i]!=a[i+1]){ flag=1; } else flag=0; } } printf("分配次数为:%d 平均子弹数为:%d\n",sum,a[1]); //输出分配次数和子弹数 system("pause");}