这道题越界的可能性好像不小,所以一定要注意。
第一种思路:
先对3取余,存储余数表,肯定不会越界。
用时:10ms
#include
#define MAX 1000000
int num[MAX];
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int i,n;
num[0]=7%3;
num[1]=11%3;
for(i=2;i<1000000;i++)
{
num[i]=(num[i-1]+num[i-2])%3;
}
while(scanf("%d",&n)==1)
{
if(num[n]==0)
printf("yes/n");
else
printf("no/n");
}
return 0;
}
第二种思路:
老实说,第一次见这种思路我很受不了。先打印出来前20项,可以发现规律,每隔3个“no”就有一个“yes”。这种解法最快!
用时:0ms
#include
#define MAX 1000000
int main()
{
int n;
while(scanf("%d",&n)==1)
{
if(n%4==2)
printf("yes/n");
else
printf("no/n");
}
return 0;
}