读书人

求指导。有代码,该怎么处理

发布时间: 2012-05-24 11:55:41 作者: rapoo

求指导。。有代码
问题如下
[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]);//输出分配次数和子弹数//
}


我能输出题目的例子,但是。我试一试其他数 的时候,。,怎么没结果呢。。。顺便来请教下思路。。。上面这个是我自己写的。。嘿嘿。、、

[解决办法]
楼主思路不错,就是代码太难读了。看我的

C/C++ code
/*    战士数: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");} 

读书人网 >C++

热点推荐