首页 > 解决方案 > 我如何使它使接近零的每个数字都除以二?

问题描述

到目前为止,我尝试过的所有操作都将代码除以 2,并且由于某种原因它会执行两次。

CSP-ARRAY 数组居民代表城市及其各自的人口。例如,以下数组显示了 8 个城市及其各自的人口:[3, 6, 0, 4, 3, 2, 7, 1] 由于流行的僵尸病正在消灭人类,一些城市的人口为 0生活。每天之后,任何与僵尸猖獗的城市相邻的城市都将失去一半的人口。编写一个程序循环遍历每个城市的人口,如果它与(右或左)相邻的城市人口减少一半人口为零的城市,直到所有城市都没有人离开。

package Arrays;

public class Project {
public static void main(String[] args){
    int i = 0;
    boolean hi = false;
    boolean hi1 = false;
    boolean hi2 = false;
    boolean hi3 = false;
    boolean hi4 = false;
    boolean hi5 = false;
    boolean hi6 = false;
    boolean hi7 = false;
    int[] a = {3, 6, 0, 4, 3, 2, 7, 1};
    if(a[0]==0) {
        hi=true;
    }
    if(a[1]==0) {
        hi1=true;
    }
    if(a[2]==0) {
        hi2=true;
    }
    if(a[3]==0) {
        hi3=true;
    }
    if(a[4]==0) {
        hi4=true;
    }
    if(a[5]==0) {
        hi5=true;
    }
    if(a[6]==0) {
        hi6=true;
    }
    if(a[7]==0) {
        hi7=true;
    }
    int z=1;
    while(hi!=false || hi1!=false || hi2!=false ||  hi3!=false || hi4!=false || hi5!=false || hi6!=false || hi7!=false) {
    if(hi=true){
        a[1]=a[1]/2;
    }
    if(hi1=true){
        a[0]=a[0]/2;
        a[2]=a[2]/2;
    }
    if(hi2=true){
        a[1]=a[1]/2;
        a[3]=a[3]/2;
    }
    if(hi3=true){
        a[2]=a[2]/2;
        a[4]=a[4]/2;
    }
    if(hi4=true){
        a[3]=a[3]/2;
        a[5]=a[5]/2;
    }
    if(hi5=true){
        a[4]=a[4]/2;
        a[6]=a[6]/2;
    }
    if(hi6=true){
        a[5]=a[5]/2;
        a[7]=a[7]/2;
    }
    if(hi7=true){
        a[6]=a[6]/2;
    }
    System.out.println("Day "+i+": ["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+"] ");
    i++;
    }
        }
}

标签: java

解决方案


我也是 Java 新手,但这是我的尝试。

import java.util.Arrays;

public class Project {

public static void main(String[] args) {

    int[] a = {3, 6, 0, 4, 3, 2, 7, 1};
    zombieApocalypse(a);

}


public static void zombieApocalypse(int[] array) {

    boolean keepGoing = true;

    int j = 1;
    while (keepGoing) {

        int[] arrayCopy = array;

        //first element
        if (array[0] == 0) {
            arrayCopy[1] = array[1] / 2;
        }

        //element in the middle
        for (int i = 1; i < array.length - 1; i++) {

            if (array[i] == 0) {
                arrayCopy[i - 1] = array[i - 1] / 2;
                arrayCopy[i + 1] = array[i + 1] / 2;
            }

        }

        //last element
        if (array[array.length - 1] == 0) {
            arrayCopy[array.length - 1] = array[array.length - 1] / 2;
        }

        System.out.println("Day " + j);
        //copies clone back to original array
        array = arrayCopy;
        System.out.println(Arrays.toString(array));

        j++;

        int counter = 0;
        //for each element checking if every city is zero
        for (int element : array) {
            counter = counter + element;
        }

        //if each element value in every city is zero, we stop
        if (counter == 0) {
            keepGoing = false;
        }
    }
}
}

推荐阅读