分子弹


package com.cn;

/**
* 在某次实弹射击训练中,班长将十个战士围成一圈发子弹。
* 首先,班长给第一个战士10颗,第二个战士2颗,第三个战士8颗,第四个战士22颗,第五个战士16颗,第六个战士4颗,第七个战士10颗,
* 第八个战士6颗,第九个战士14颗,第十个战士20颗。
* 然后按如下方法将每个战士手中的子弹进行调整:
* 所有的战士检查自己手中的子弹数,如果子弹数为奇数,则向班长再要一颗。
* 然后每个战士再同时将自己手中的子弹分一半给下一个战士(第10 个战士将手中的子弹分一半给第1个战士)。
* 问需要多少次调整后,每个战士手中的子弹数都相等?每人各有多少颗子弹?
* 要求输出每轮调整后各战士手中的子弹数。
*/
public class FXD {
public static void toFZD() {
int[] zd = {10, 2, 8, 22, 16, 4, 10, 6, 14, 10};
int[] halfZD = new int[zd.length];
boolean flag = false;
int times = 0;
//判断子弹是否都相等
while (flag == false) {
System.out.println("当前各个士兵子弹拥有的数量");
for (int i = 0; i < zd.length; i++){
System.out.print(zd[i]+" ");
}
System.out.println();
flag = true;
System.out.println("分得的一半");
for (int i = 0; i < zd.length; i++) {
//检查子弹是否为奇数,若是奇数则+1 并且计算出zd[i]的一半haldZD【i️
if (zd[i] % 2 != 0) {
zd[i] = zd[i] + 1;
}
//或得一半
zd[i] = halfZD[i] = zd[i] / 2;
System.out.print(halfZD[i]+" ");
}
System.out.println();
System.out.println("分一半给下一个人");
for (int i = 0; i < zd.length; i++) {
//得到比人分的子弹 第一个人得到最后一个人分的子弹
if (i == 0) {
zd[i] = halfZD[zd.length - 1] + zd[i];
} else {
zd[i] = halfZD[i - 1] + zd[i];
}
System.out.print(zd[i]+" ");
}
System.out.println();
times++;
//判断子弹分后 大伙手中子弹数量数否相同 又一个不相同 就false
int temp = zd[0];
for (int i = 0; i < zd.length; i++) {
if (zd[i] != zd[0]) {
flag = false;
}
}
}
System.out.println("一共相互给了多少轮:" + times);
System.out.println("此时每个士兵手里一共有:" + zd[0]);
}

public static void main(String[] args) {
toFZD();
}
}


运行结果:

 

posted @ 2020-04-27 17:26  ~gcc~  阅读(296)  评论(0编辑  收藏  举报