在某次实弹射击训练中,班长将十个战士围成一圈发子弹。 首先,班长给第一个战士10颗,第二个战士2颗,第三个战 士8颗,第四个战士22颗,第五个战士16颗,第六个战士4颗,*第七个战士10颗,第八个战士6颗,第九个战士14颗,第十个战士20颗。*然后按如下方法将每个战士手中的子弹进行调整:所有的战士检查自己*手中的子弹数,如果子弹数为奇数,则向班长再要一颗。然后每个战士再同时将自己手中的子弹分一半给下一个战士(第10 个战士将手中的子弹分一半给第1个战士)。问需要多少次调整后,每个战士手中的子弹数都相等?每人各有多少颗子弹?
/**
*要求输出每轮调整后各战士手中的子弹数。
*要求结果的输出格式为
*
*0 10 2 8 22 16 4 10 6 14 20 各战士手中原始的子弹数
*1 xx xx xx xx xx xx xx xx xx xx 第1轮各战士手中的子弹数
*2 xx xx xx xx xx xx xx xx xx xx 第2轮各战士手中的子弹数
……
*n xx xx xx xx xx xx xx xx xx xx 最后一轮各战士手中的子弹数(应相等)
*/
#include"stdio.h"
/**
*对子弹数量是奇数的处理
*/
void isSingle(int * counts)
{
int i ;
for(i = 0; i < 10;i++)
{
if(counts[i]%2!=0)
{
counts[i]++;
}
}
}
/**
* 判断所有战士的子弹数量是否相等;
*/
int isEqual(int *counts)
{
int i = 1;
int temp = counts[0];
for(i;i<10;i++)
{
if(temp!=counts[i])
{
return 0;
}
}
return 1;
}
/**
*打印
*/
void display(int *counts,int times)
{
int i ;
printf("第%d次 ",times);
for( i = 0; i < 10; i++)
{
printf("%d ",counts[i]);
}
printf("/n");
}
void main()
{
int counts[10]={10,2,8,22,16,4,10,6,14,20 };
int i;
int times = 1;
int nextNum;
int temp;
display(counts,times);
while(!isEqual(counts))
{
isSingle(counts);
temp = counts[0]/2;
for(i=0;i<10;i++)
{
if(i !=9)
{
counts[i] -= temp;
nextNum = counts[i+1];
counts[i+1] += temp;
temp = nextNum/2;
}else
{
counts[9] -=temp;
counts[0]+=temp;
}
}
times++;
display(counts,times);
}
}