这个题就是求SG函数
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=30;
int f[maxn],sg[1100];
bool vis[1100];
int SG(int x)
{
memset(vis,0,sizeof(vis));
for(int i=0;f[i]<=x;i++)
vis[sg[x-f[i]]]=1;
for(int i=0;;i++)
if(!vis[i])
return i;
return -1;
}
void Init()
{
f[0]=1;f[1]=2;
for(int i=2;f[i-1]<=1000;i++)
f[i]=f[i-1]+f[i-2];
sg[0]=0;
for(int i=1;i<=1000;i++)
sg[i]=SG(i);
}
int main()
{
Init();
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)&&(a+b+c))
{
if(sg[a]^sg[b]^sg[c])
printf("Fibo\n");
else
printf("Nacci\n");
}
return 0;
}