题目描述
There are many lamps in a line. All of them are off at first. A series of operations are carried out on these lamps. On the i-th operation, the lamps whose numbers are the multiple of i change the condition ( on to off and off to on ).
输入
Each test case contains only a number n ( 0< n<= 10^5) in a line.
输出
Output the condition of the n-th lamp after infinity operations ( 0 - off, 1 - on ).
样例输入
1
5
样例输出
1
0
Consider 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.
题解
大概意思就是输入一个x,一共有x个灯泡,同时也进行x次操作,进行第i次操作时,如果某灯泡的序号恰为i的倍数,便对该灯泡操作一波(开到关或者时关到开)。
我们需要求解的是全部操作结束后最后一个灯泡到底是个什么状态。你会发现最后一个灯的开关和它的序数的约数有关,并且约数往往成对出现,所以一般就是一开一关两下,等于没整,还是关的,当这个数,恰巧为完全平方数的时候,这个灯就刚好是开的。
故该题可转化为,判断x是否为完全平方数。
#include <stdio.h>
#include <math.h>
int main(void)
{
int x;
double i;
while(scanf("%d",&x) != EOF){
i = sqrt(x);
if(i == (int)sqrt(x))//如果x为完全平方数,sqrt(x)为整数
printf("1\n");
else
printf("0\n");
}
return 0;
}
/*
for(int i = 1;i < x;i++){
if(i * i == x)
flag = 1;
}
if(flag == 1)
printf("1\n");
else
printf(0\n);
*/
//被抛弃的初代思路