c++ A组蓝桥杯填空题第二题下棋问题
#include <iostream>
using namespace std;
const int N=26;
int g[N];
long long ans;
bool check_s()
{
int s[N];
for(int i=1;i<=25;i++) s[i]=s[i-1]+g[i];
if(s[5]-s[0]==5||s[10]-s[5]==5||s[15]-s[10]==5||s[20]-s[15]==5||s[25]-s[20]==5) return false;
if(s[5]-s[0]==0||s[10]-s[5]==0||s[15]-s[10]==0||s[20]-s[15]==0||s[25]-s[20]==0) return false;
int col[5]={0};
for(int i=1;i<=5;i++)
{
col[i]=0;
for(int j=i;j<=25;j+=5)
{
col[i]=col[i]+g[j];
}
}
if(col[1]==0||col[2]==0||col[3]==0||col[4]==0||col[5]==0) return false;
if(col[1]==5||col[2]==5||col[3]==5||col[4]==5||col[5]==5) return false;
if(g[1]==1&&g[7]==1&&g[13]==1&&g[19]==1&&g[25]==1) return false;
if(g[1]==0&&g[7]==0&&g[13]==0&&g[19]==0&&g[25]==0) return false;
if(g[5]==1&&g[9]==1&&g[13]==1&&g[17]==1&&g[21]==1) return false;
if(g[5]==0&&g[9]==0&&g[13]==0&&g[17]==0&&g[21]==0) return false;
return true;
}
void dfs(int u,int num)
{
if(num==13&&check_s())
{
ans++;
return;
}
if(u>25) return;
//不下
g[u+1]=0;
dfs(u+1,num);
//下
g[u+1]=1;
dfs(u+1,num+1);
}
int main()
{
dfs(0,0);
cout<<ans<<endl;
return 0;
}
为什么最后输出是1,ans明明加了很多次,甚至不++,输出也是1,这是为什么呀?为什么我这段代码搜不出来呀?求佬解答。