上面是题目,这个问题用暴力解决,下面是代码。
#include <iostream>
#include <math.h>
using namespace std;
char n[12]="0AAAAAAAAAA";
bool fun1()
{
int flag=0;
for(int i=1;i<=10;i++)
{
if(n[i]=='B'){
flag=i;
break;
}
}
if(n[1]-'A'+2==flag) return true;
return false;
}
bool fun2()
{
if(n[n[2]-'A'+2]==n[n[2]-'A'+3]) return true;
return false;
}
bool fun3()
{
int count=0,flag=0;
for(int i=1;i<=10;i++)
{
if(n[i]==n[3] && i!=3)
{
flag=i;
count++;
}
}
if((n[3]=='A' && flag==1) ||
(n[3]=='B' && flag==2) ||
(n[3]=='C' && flag==4) ||
(n[3]=='D' && flag==7) ||
(n[3]=='E' && flag==6)) return true;
return false;
}
bool fun4()
{
int count=0;
for(int i=1;i<=10;i++)
{
if(n[i]=='A') count++;
}
if(n[3]-'A'==count ) return true;
return false;
}
bool fun5()
{
int count=0,flag=0;
for(int i=1;i<=10;i++)
{
if(n[i]==n[5] && i!=5)
{
flag=i;
count++;
}
}
if((n[5]=='A' && flag==10) ||
(n[5]=='B' && flag==9) ||
(n[5]=='C' && flag==8) ||
(n[5]=='D' && flag==7) ||
(n[5]=='E' && flag==6)) return true;
return false;
}
bool fun6()
{
int flag=0,count[5]={0,0,0,0,0};
for(int i=1;i<=10;i++)
{
if(n[i]=='A')count[0]++;
else if(n[i]=='B')count[1]++;
else if(n[i]=='C')count[2]++;
else if(n[i]=='D')count[3]++;
else if(n[i]=='E')count[4]++;
}
for(int i=1;i<5;i++)
{
if(count[0]==count[i] && n[6]-'A'+1==i) return true;
}
if(n[6]=='E') return true;
return false;
}
bool fun7()
{
int m=labs(n[8]-n[7]);
if(m==4 && n[7]=='A') return true;
else if(m==3 && n[7]=='B') return true;
else if(m==2 && n[7]=='C') return true;
else if(m==1 && n[7]=='D') return true;
else if(m==0 && n[7]=='E') return true;
return false;
}
bool fun8()
{
int count=0;
for(int i=1;i<=10;i++)
{
if(n[i]=='A' || n[i]=='E') count++;
}
if(n[8]-'A'+2==count) return true;
return false;
}
bool fun9()
{
int count=0;
for(int i=1;i<=10;i++)
{
if(n[i]=='B' || n[i]=='C' || n[i]=='D') count++;
}
if((count==2 || count==3 || count==5 || count==7) && n[9]=='A') return true;
else if((count==2 || count==6) && n[9]=='B') return true;
else if((count==4 || count==9) && n[9]=='C') return true;
else if(count==8 && n[9]=='D') return true;
else if((count==5 || count==10) && n[9]=='E') return true;
return false;
}
void f()
{
n[1]++;
for(int i=1;i<=10;i++)
{
if(n[i]>'E'){n[i]='A'; n[i+1]++;}
}
}
int main()
{
long long count=0,S=125*125*125*5;
while(count<S)
{
f();
if(fun1() && fun2() && fun3()
&& fun4() && fun5() && fun6()
&& fun7() && fun8() && fun9())
{
cout<<n+1<<endl;
}
count++;
}
return 0;
}
最后的运行结果是:ABDDA EDCBA
没考虑效率和优化,只是想知道它的答案而已。