Switch Game
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10697 Accepted Submission(s): 6521
1 5
1 0Consider the second test case: The initial condition : 0 0 0 0 0 … After the first operation : 1 1 1 1 1 … After the second operation : 1 0 1 0 1 … After the third operation : 1 0 0 0 1 … After the fourth operation : 1 0 0 1 1 … After the fifth operation : 1 0 0 1 0 … The later operations cannot change the condition of the fifth lamp any more. So the answer is 0.Hinthint
题目大意
开灯问题。有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共进行n此操作,问n此操作之后第n个灯的状态。
解题思路
因为只要求求第n个灯的状态,所以要简单很多。首先要建立一个数组,数组的下标即是灯的编号,每次操作看看是不是第n个灯的因子,是的话对其造成影响,其值加一,不是的话则无影响。最后对其值对2取余,因为其最开始为0,代表不亮,所以是奇数则亮(1),是偶数则灭(0)。
代码
#include<stdio.h>
#include<string.h>
int s[110000];
int main()
{
int n;
int i,j;
while(scanf("%d",&n)!=EOF)
{
memset(s,0,sizeof(s)); //注意每组数据都要对数组进行初始化,避免上次操作影响这次的结果。
for(i=1;i<=n;i++)
if(n%i==0)
s[n]++;
printf("%d\n",s[n]%2);
}
return 0;
}