HDU2053 switch game
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2053
题意:有n盏灯,在第i次操作中,其数字为i的倍数的灯改变了条件(开到关,关到开)。n次操作完,问第n盏灯的状态。
思路一(会超时)
首先我想到的是逐步操作,第1,2,3…直到n次,但是会超时。。。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
while(~scanf("%d",&n))
{
int a[n+1]={0};
i=1;
while(i<=n)
{
for(int j=1;j<=n;j++)
{
if(j%i==0)
{
if (a[j]==0) {a[j]=1;}
else {a[j]=0;}
}
}
i++;
}
printf("%d\n",a[n]);
}
return 0;
}
思路二:后来想了一下,只用求第n盏灯变化的次数%2就行啦
用n逐步%i(i从1到n)。可求第n盏灯变化次数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
int s=0;
for(int i=1;i<=n;i++)
{
if(n%i==0)
s++;
}
printf("%d\n",s%2);
}
return 0;
}
思路三:大佬思路
看讨论区有用平方数判断的,借鉴一下代码
原链接:http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=36286&messageid=1&deep=0
#include<bits\stdc++.h>
using namespace std;
int main()
{
int a;
while(cin>>a)
{
double b=sqrt(a)*1.;
cout<<(b==int(b))<<endl;
}
}