详解点击:
一. 巴什博弈
int t,n,m;
int main()
{
cin>>t;
while (t--){
cin>>n>>m;
int mod=n%(m+1);
if(mod==0) {printf("second\n");continue; }
printf("first\n");
}
return 0;
}
int t,n,m;
int main()
{
while (cin>>n>>m){
if(m>n){
printf("%d",n);
for(int i=n+1;i<=m;i++)
cout<<' '<<i;
printf("\n");
} else{
int mod=n%(m+1);
if(mod==0)
printf("none\n");
else
printf("%d\n",mod);
}
}
return 0;
}
二. Fibonacci’s Game(斐波那契博弈)
int t,n,m;
int main()
{
int f[50];
f[0]=2,f[1]=3;
for(int i=2;i<50;i++)
f[i]=f[i-1]+f[i-2];
while (cin>>n&&n){
bool flag=0;
for(int i=0;i<50;i++)
if(f[i]==n){
printf("Second win\n");
flag=1;
break;
}
if(!flag)
printf("First win\n");
}
return 0;
}
三. 威佐夫博奕(Wythoff Game)
int t,n,m;
int main()
{
int a,b;
while (cin>>a>>b){
int c=(int)(abs(b-a)*((sqrt(5)+1)/2));
if(c==min(a,b))
printf("0\n");
else
printf("1\n");
}
return 0;
}
四. 尼姆博奕(Nimm Game)
int main()
{
int a[maxn],n;
while (cin>>n&&n){
int ans=0,cnt=0;
for(int i=1;i<=n;i++)
cin>>a[i],ans^=a[i];
if(ans==0){printf("0\n");continue;}
for(int i=1;i<=n;i++){
int k=ans^a[i];
if(a[i]-k>0) cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
五. SG函数
int a[20],sg[maxn],n;
int mex(int x)
{
if(sg[x]!=-1) return sg[x];
bool vis[maxn];
memset(vis,false,sizeof(vis));
for(int i=0;i<=10;i++){
int temp=x-a[i];
if(temp<0) break;
sg[temp]=mex(temp);
vis[sg[temp]]=true;
}
for(int i=0;;i++)
if(!vis[i]){sg[x]=i;break;}
return sg[x];
}
int main()
{
a[0]=1;
for(int i=1;i<=10;i++)
a[i]=a[i-1]*2;
while (cin>>n){
memset(sg,-1,sizeof(sg));
if(mex(n)) puts("Kiki");
else puts("Cici");
}
return 0;
}