Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-java中的一个谜_Java_Arrays_Algorithm - Fatal编程技术网

java-java中的一个谜

java-java中的一个谜,java,arrays,algorithm,Java,Arrays,Algorithm,我的朋友给了我一个谜语。事情是这样的: 有100人。他们中的每一个人依次做以下工作: 第一个人打开所有的盒子。第二个人改变了主意 说明数字除以2的所有框,不带 剩余物。例如,如果一个长方体打开,其编号被除 到2点,它就关闭了。封闭的盒子也是如此 第三个人将状态更改为编号为的所有框 除以3,不带余数。“i”人将状态更改为 所有数字被i除的盒子,没有余数 现在,在流程结束时,我需要显示所有框(它们的 (数字)谁是开放的 我试图实施一个解决方案,但我认为它没有效率。这是: public class B

我的朋友给了我一个谜语。事情是这样的:

有100人。他们中的每一个人依次做以下工作:

第一个人打开所有的盒子。第二个人改变了主意 说明数字除以2的所有框,不带 剩余物。例如,如果一个长方体打开,其编号被除 到2点,它就关闭了。封闭的盒子也是如此

第三个人将状态更改为编号为的所有框 除以3,不带余数。“i”人将状态更改为 所有数字被i除的盒子,没有余数

现在,在流程结束时,我需要显示所有框(它们的 (数字)谁是开放的

我试图实施一个解决方案,但我认为它没有效率。这是:

public class BoxesExc {

    public static void main(String[] args) {
        Box[] boxes = new Box[100];
        // Inflating the array with boxes
        for(int i=0; i<boxes.length; i++) {
            boxes[i] = new Box(i, false);
        }

        // Main part:
        for(int i=1; i<=boxes.length; i++) {
            for(int j=1; j<=i; j++) {
                // If the number is even
                if(i%2 == 0) {
                    if(j%i == 0) {
                        boxes[j].setOpen(!boxes[j].isOpen);
                    }
                } 
                // If the number is odd
                else {
                    if(j%2 != 0) {
                        if(j%i == 0) {
                            boxes[j].setOpen(!boxes[j].isOpen);
                        }
                    }
                }
            }
        }

    //Displaying the opened boxes:
    for(Box box : boxes) {
        if(box.isOpen)
            System.out.println(box.getNum()+",");
    }
    }

    public static class Box {
        private int num;
        private boolean isOpen;

        public Box(int num, boolean isOpen) {
            this.isOpen = isOpen;
        }

        public int getNum() {
            return num;
        }

        public boolean isOpen() {
            return isOpen;
        }

        public void setOpen(boolean isOpen) {
            this.isOpen = isOpen;
        }

    }
}
public类{
公共静态void main(字符串[]args){
方框[]方框=新方框[100];
//用盒子膨胀阵列

对于(int i=0;i遍历所有框,并根据当前索引进行调整。根据框之前的状态进行切换以设置框打开或关闭。然后在完成100次循环后,对100个框进行二次循环,查看哪些框打开并打印出来。

下面是我在中描述的快速实现评论如下:

public class BoxesExc {

    public static void main(String[] args) {
        Box[] boxes = new Box[100];
        // Inflating the array with boxes
        for(int i=0; i<boxes.length; i++) {
            boxes[i] = new Box(i, false);
        }

        // Main part:
        for (int i=1; i < boxes.length; i++) {
            // j+=i goes 3,6,9... for i = 3
            for (int j = i; j < boxes.length; j+=i) {
                 boxes[j].setOpen(!boxes[j].isOpen);
            }
        }

        //Displaying the opened boxes:
        for(Box box : boxes) {
            if(box.isOpen)
                System.out.println(box.getNum()+",");
        }
    }
}
public类{
公共静态void main(字符串[]args){
方框[]方框=新方框[100];
//用盒子膨胀阵列

对于(inti=0;i它有非常简单的解

将要打开的盒子将是所有的盒子,它们的位置是一个数字的平方幂

例如,在您的问题中,其介于1-100之间,因此答案为:

1 4 9 16 25 36 49 64 81 100


而且我的解比你的解快,因为它的阶数是θ(√n)

由于您只需打印数字,我认为以下内容就足够了:

public class BoxesExc {
    public static void main(String[] args) {
        int boxNum = 100;
        for(int i = 1; i*i <= boxNum; i++) {
            System.out.print(i*i+",");
        }
    }
}
public类{
公共静态void main(字符串[]args){
int-boxNum=100;

对于(inti=1;i*i)这是基于一个著名的问题。关于“灯泡切换脑筋急转弯”的一点研究举个例子:
12
可以被
2,3,4,6,12
整除。它将被关闭。你在这里搜索的是除数的奇偶性。这个问题似乎离题了,因为它更适合谢谢你,njzk2。你有什么建议吗?我认为这是一个很好的想法分3步完成:步骤1,创建一个数组来计算除数,然后循环i=1-100,再次循环以增加所有的
n*i
(1,2,3,…,2,4,6,…,3,6,9,…)步骤2,在该数组上循环,并测试除数计数的奇偶性。步骤3,显示。
public class BoxesExc {
    public static void main(String[] args) {
        int boxNum = 100;
        for(int i = 1; i*i <= boxNum; i++) {
            System.out.print(i*i+",");
        }
    }
}