这种情况太复杂 超时了
#include<bits/stdc++.h>
using namespace std;
bool f(int x){
if(x>=1){
if(x==1) return false;//找规律可推出为这三种情况的奇数时必输
else if(x==3) return false;
else if(x==7) return false;
else if(x==8) return true;//为8时必赢
else //取1、3、5、7后对手达到上面四种的某种情况
//一直递归 当有一种返回false则结果为true
return (!f(x-1)||!f(x-3)||!f(x-7)||!f(x-8));
}
return false;
}
int main(){
int n;
cin>>n;
while(n--){
int x;
cin>>x;
if(f(x)) cout<<1<<endl;
else cout<<0<<endl;
}
return 0;
}
下面为一种不超时解法
#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int a[N];
int main(){
for(int i=1;i<=N;i++){//先把每种情况初始化
if(!a[i]){ //找规律
a[i+1]=1;
a[i+3]=1;
a[i+7]=1;
a[i+8]=1;
}
}
int n;
cin>>n;
while(n--){
int x;
cin>>x;
cout<<a[x]<<endl;
}
return 0;
}