用Lua编写ACM算法竞赛开灯问题

 

有n盏灯,编号为1~n。第一个人把所有灯打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。k<=n<=1000

 1 function func(n, k)
 2     local t = {}     -- 定义空表 表示所有灯都是关闭状态
 3     for i = 1, k do
 4         for j = 1, n do
 5             if j % i == 0 then
 6                t[j] = not t[j]
 7             end
 8         end
 9     end
10 
11     for i = 1, #t do
12         if t[i] then
13             print(i)
14         end
15     end
16 end
17 ------------------------------
18 example:
19 func(7, 3)   -- 1, 5, 6, 7

 

你可能感兴趣的:(用Lua编写ACM算法竞赛开灯问题)