Java 带for循环的R字谜
我有以下任务要解决:从1到100,我有100个门。我让10个人一个接一个地进入那排门。门最初是打开的。 第一个人每五次开门一次;;5, 10, 15, 20...100 第二个人每十次开门一次;10, 20, 30 40, 100 第三人每15次开门一次;15,30 45... 100 这种模式一直持续到最后一个人打开第50和100扇门(第50扇门) 每个人都经过后,哪些门是关着的?它应该输出门的具体数量(例如,5,70,75,96100)Java 带for循环的R字谜,java,r,Java,R,我有以下任务要解决:从1到100,我有100个门。我让10个人一个接一个地进入那排门。门最初是打开的。 第一个人每五次开门一次;;5, 10, 15, 20...100 第二个人每十次开门一次;10, 20, 30 40, 100 第三人每15次开门一次;15,30 45... 100 这种模式一直持续到最后一个人打开第50和100扇门(第50扇门) 每个人都经过后,哪些门是关着的?它应该输出门的具体数量(例如,5,70,75,96100) 我已经用Java解决了这个问题,下面显示了我的代码。我
我已经用Java解决了这个问题,下面显示了我的代码。我现在试图在R中解决它,但我在for循环中遇到了问题,我没有得到正确的答案(我必须使用for循环语句)。有人对如何解决这个问题有什么建议吗
enter code here
int personer = 10;
boolean[] doorOpen = new boolean [100];
int startPosition;
for(int start = 5; start < 51; start +=5) {
for(int i = start-1; i < doorOpen.length; i = i + start) {
if ( doorOpen [i] == false ) {
doorOpen[i] = true;
//System.out.println("endret d¯r nr: " + (i+1) + " -------- " +" D¯r lukket : " + doorOpen[i] );
} else {
doorOpen[i] = false;
//System.out.println("endret d¯r nr: " + (i+1) + " -------- " +" D¯r lukket : " + doorOpen[i] );
}
}
System.out.println();
}
for (int i = 0; i < doorOpen.length; i++) {
if(doorOpen[i] == true) {
System.out.print((i+1) + " ");
}
}
} // main slutt
在此处输入代码
内部人员=10;
布尔值[]门打开=新布尔值[100];
int起始位置;
用于(int start=5;start<51;start+=5){
用于(int i=start-1;i
我的R代码如下所示:
enter code here
door_game <- function(total_doors=100,passes=10) {
doors <- rep(FALSE,total_doors)
for ....
return (which(doors==true))
door_game()
在此处输入代码
door_game您可以使用outer操作符来计算每个人将打开哪些门,如果这些门不限于100扇门的话。(想想乘法表)
下面是如何使用循环来实现这一点:
number_of_persons <- 10
total_doors <- 100
open_doors <- seq(5,number_of_persons*5,5)
opened_result <- NULL
for (i in open_doors){
opened <- seq(i,total_doors,i)
opened_result <- unique(c(opened_result,opened))
}
not_opened <- setdiff(1:total_doors,opened_result)
numberofpersons“但是我在for循环方面有问题”=>具体是什么问题?我不知道如何创建它。我只知道如何创建它,如果它与一门跳跃。在这种情况下,它是5。我在R方面的经验有限。@Meg回路在R中不是最优的。最好的解决方案通常是矢量化的。谢谢!如果我把它抄进去,我就得不到任何答案。缺少什么?数据在我们创建的对象中。如果您在控制台中键入not_opened
,然后按go,您应该会看到未打开的门。@Meg将您的预期回报添加到问题中。您提供了一个所需结果的示例,但它毫无意义。5号门将首先打开。正确答案应该是:5、20、45、55、60、65、70、75、85、90、95、,100@Meg但是2号人开门#10,为什么不在里面?
setdiff(1:100,no_limit[no_limit<=100])
[1] 1 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24 26 27 28 29 31 32 33 34 36 37 38 39 41 42 43 44 46 47 48 49 51 52 53 54 56 57 58 59 61
[50] 62 63 64 66 67 68 69 71 72 73 74 76 77 78 79 81 82 83 84 86 87 88 89 91 92 93 94 96 97 98 99
c(1:100)[1:100%%5!=0]
[1] 1 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24 26 27 28 29 31 32 33 34 36 37 38 39 41 42 43 44 46 47 48 49 51 52 53 54 56 57 58 59 61
[50] 62 63 64 66 67 68 69 71 72 73 74 76 77 78 79 81 82 83 84 86 87 88 89 91 92 93 94 96 97 98 99
number_of_persons <- 10
total_doors <- 100
open_doors <- seq(5,number_of_persons*5,5)
opened_result <- NULL
for (i in open_doors){
opened <- seq(i,total_doors,i)
opened_result <- unique(c(opened_result,opened))
}
not_opened <- setdiff(1:total_doors,opened_result)