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