[第六关][循环]100扇门的故事

[第六关][循环]100扇门的故事

问题:你有一排初始关闭着的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%

我类个去,傻傻的小伙伴们是不是又发现忽悠妹子的宝藏了!!!

这个参与挑战打卡游戏吧!有新的思路可以在留言区分享哦!

 

给TA捐赠
共{{data.count}}人
人已捐赠
其他

[网络]保存网页

2017-11-9 11:21:34

其他案例

[办公][系统辅助]羞羞一指禅

2017-12-2 22:00:57

2 条回复 A文章作者 M管理员
  1. chn.fwt

    ; 循环法简化,省去创建和连接数组的步骤
    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

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索