问题:你有一排初始关闭着的100扇门。你对所有门做100遍操作。第一次,你去看每一扇门,打开门(如果门关着,你打开它;如果它是打开的,你就关闭它)。第二次你只去看2的倍数扇门(2号门,4号门,6号门。。。)。第三次,3的倍数扇门(3,6,9。。。),等等,直到第100遍。最后一遍后的门的状态是什么?哪些是开放的,哪些是封闭的?
解题方式一:二货解法,按照题干大干一百次就行了呗!干完还有种大智若愚的感觉。。。实在是太累了,傻傻实在是开不明白!但是对于电脑不过是弹指一灰间的事情啦!!毛毛雨,(电脑君)看我的!!
注:以下代码是AHK写的,如果你不知道呢请访问了解相关知识智能热键 和使用方法
;河许人出品 ;一百个门的故事 ;初始化门的状态 loop, 100 门%A_Index% := "关" ;开一百遍门 loop, 100 { x := A_Index, y := A_Index while (x <= 100) { 当前门 := 门%x% if 当前门 contains 关 { 门%x% := "开" x += y } else if 当前门 contains 开 { 门%x% := "关" x += y } } } loop, 100 { 当前门 := 门%A_Index% if 当前门 contains 开 Res .= "门 " A_Index " 开着`n" } MsgBox % Res
解题方式二:哈哈,这不就是小学生的奥数题嘛!都能举一反三,实在不行问问度娘呗!!
这个问题就是看1-100的小于等于100的因数
譬如1因数只有1–它只能被1开开以后的人都不能关 最后是开
2因数1,2–它被1打开被2关上其他的都不能接触到2号门了 最后是关
3因数1,3–同理最后是关
4因数1,2,4–1打开2关上3打开 最后打开
也就是说因数个数是奇数的最后都是开的,因数个数是偶数的最后都是关的
1-100里面y因数个数是奇数的只有完全平方数1,4,9,16,25,36,49,64,81,100 (因为对一个数x来说,存在因数m,必然存在另一个因数x/m,两个一对,只有完全平方数的平方根对应的因数是其自己,故其有奇数个因数。)
(电脑君)纳尼,原来这样啊!这样可以省去70%代码!
While (Door := A_Index ** 2) <= 100 Result .= "Door " Door " is open`n" MsgBox, %Result%
我类个去,傻傻的小伙伴们是不是又发现忽悠妹子的宝藏了!!!
这个参与挑战打卡游戏吧!有新的思路可以在留言区分享哦!
; 循环法简化,省去创建和连接数组的步骤
outstr := “”
loop(100){
n := a_Index
isopen := 0
loop(100){
if(!mod(n, a_Index))
isopen := !isopen
}
outstr .= format(“door{: 3d}: {}`n”, n, isopen?”open”:”close”)
}
msgbox outstr
谢谢大佬分享