来源:HDU1021
这个题目其实很简单,但是我的答案和书上的答案不同,所以和大家分享。
书上答案是使用打表,但是实际上可以寻找循环节。。。
书上代码:
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN=1000010;
int d[MAXN];
void pre_solve()
{
int i;
d[0]=1;
d[1]=2;
for(i=2;i<1000000;i++)
d[i]=(d[i-1]%3+d[i-2]%3)%3;
}
int main(){
pre_solve();
int n;
while(scanf("%d",&n)!=EOF){
if(!d[n])puts("yes");
else puts("no");
}
return 0;
}
循环节:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=EOF){
if(n%4==2)cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}