把下面这段程序跑一下就是答案:BCACACDABA
#include <iostream>
#include <vector>
using namespace std;
string s(11,'A');
void calMin(string &smin)
{
vector<int> ivec(4);
int i;
for(i=1; i<=10; i++)
{
ivec[s[i]-'A']++;
}
int min=100;
for(i=0; i<4; i++)
{
if(ivec[i]<min)
{
min=ivec[i];
}
}
for(i=0; i<4; i++)
{
if(ivec[i]==min)
{
smin.insert(smin.end(),static_cast<char>('A'+i));
}
}
}
bool ifneighbor(char a, char b)
{
switch(a)
{
case 'A': if(b=='B') return true; break;
case 'B': if(b=='A'||b=='C') return true; break;
case 'C': if(b=='B'||b=='D') return true; break;
case 'D': if(b=='C') return true; break;
}
return false;
}
void print()
{
for(int i=1; i<=10; i++)
{
cout<<"第"<<i<<"题:"<<s[i]<<endl;
}
}
int maxminusmin()
{
vector<int> ivec(4);
int i;
for(i=1; i<=10; i++)
{
ivec[s[i]-'A']++;
}
int min=100,max=0;
for(i=0; i<4; i++)
{
if(ivec[i]<min)
{
min=ivec[i];
}
if(ivec[i]>max)
{
max=ivec[i];
}
}
return max-min;
}
bool check()
{
//第二题
switch(s[2])
{
case 'A':
if(s[5]!='C')return false;
break;
case 'B':
if(s[5]!='D')return false;
break;
case 'C':
if(s[5]!='A')return false;
break;
case 'D':
if(s[5]!='B')return false;
break;
}
//第三题
switch(s[3])
{
case 'A':
if(s[3]==s[2]||s[3]==s[4]||s[3]==s[6])return false;
break;
case 'B':
if(s[6]==s[2]||s[6]==s[3]||s[6]==s[4])return false;
break;
case 'C':
if(s[2]==s[3]||s[2]==s[4]||s[2]==s[6])return false;
break;
case 'D':
if(s[4]==s[2]||s[4]==s[3]||s[4]==s[6])return false;
break;
}
//第四题
switch(s[4])
{
case 'A':
if(s[1]!=s[5])return false;
break;
case 'B':
if(s[2]!=s[7])return false;
break;
case 'C':
if(s[1]!=s[9])return false;
break;
case 'D':
if(s[6]!=s[10])return false;
break;
}
//第五题
switch(s[5])
{
case 'A':
if(s[8]!='A')return false;
break;
case 'B':
if(s[4]!='B')return false;
break;
case 'C':
if(s[9]!='C')return false;
break;
case 'D':
if(s[7]!='D')return false;
break;
}
//第六题
switch(s[6])
{
case 'A':
if(!(s[8]==s[2]&&s[8]==s[4]))return false;
break;
case 'B':
if(!(s[8]==s[1]&&s[8]==s[6]))return false;
break;
case 'C':
if(!(s[8]==s[3]&&s[8]==s[10]))return false;
break;
case 'D':
if(!(s[8]==s[5]&&s[8]==s[9]))return false;
break;
}
//第七题
string smin;
calMin(smin);
switch(s[7])
{
case 'A':
if(smin.find("C")==string::npos)return false;
break;
case 'B':
if(smin.find("B")==string::npos)return false;
break;
case 'C':
if(smin.find("A")==string::npos)return false;
break;
case 'D':
if(smin.find("D")==string::npos)return false;
break;
}
//第八题
switch(s[8])
{
case 'A':
if(ifneighbor(s[1],s[7]))return false;
break;
case 'B':
if(ifneighbor(s[1],s[5]))return false;
break;
case 'C':
if(ifneighbor(s[1],s[2]))return false;
break;
case 'D':
if(ifneighbor(s[1],s[10]))return false;
break;
}
//第九题
switch(s[9])
{
case 'A':
if((s[1]==s[6])==(s[6]==s[5]))return false;
break;
case 'B':
if((s[1]==s[6])==(s[10]==s[5]))return false;
break;
case 'C':
if((s[1]==s[6])==(s[2]==s[5]))return false;
break;
case 'D':
if((s[1]==s[6])==(s[9]==s[5]))return false;
break;
}
//第十题
int d = maxminusmin();
switch(s[10])
{
case 'A':
if(d!=3)return false;
break;
case 'B':
if(d!=2)return false;
break;
case 'C':
if(d!=4)return false;
break;
case 'D':
if(d!=1)return false;
break;
}
return true;
}
void search(int m)
{
if(m>10)
{
if(check())
{
print();
//exit(0);
}
return;
}
s[m] = 'A';
search(m+1);
s[m] = 'B';
search(m+1);
s[m] = 'C';
search(m+1);
s[m] = 'D';
search(m+1);
}
int main()
{
s.reserve(11);
search(1);
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
string s(11,'A');
void calMin(string &smin)
{
vector<int> ivec(4);
int i;
for(i=1; i<=10; i++)
{
ivec[s[i]-'A']++;
}
int min=100;
for(i=0; i<4; i++)
{
if(ivec[i]<min)
{
min=ivec[i];
}
}
for(i=0; i<4; i++)
{
if(ivec[i]==min)
{
smin.insert(smin.end(),static_cast<char>('A'+i));
}
}
}
bool ifneighbor(char a, char b)
{
switch(a)
{
case 'A': if(b=='B') return true; break;
case 'B': if(b=='A'||b=='C') return true; break;
case 'C': if(b=='B'||b=='D') return true; break;
case 'D': if(b=='C') return true; break;
}
return false;
}
void print()
{
for(int i=1; i<=10; i++)
{
cout<<"第"<<i<<"题:"<<s[i]<<endl;
}
}
int maxminusmin()
{
vector<int> ivec(4);
int i;
for(i=1; i<=10; i++)
{
ivec[s[i]-'A']++;
}
int min=100,max=0;
for(i=0; i<4; i++)
{
if(ivec[i]<min)
{
min=ivec[i];
}
if(ivec[i]>max)
{
max=ivec[i];
}
}
return max-min;
}
bool check()
{
//第二题
switch(s[2])
{
case 'A':
if(s[5]!='C')return false;
break;
case 'B':
if(s[5]!='D')return false;
break;
case 'C':
if(s[5]!='A')return false;
break;
case 'D':
if(s[5]!='B')return false;
break;
}
//第三题
switch(s[3])
{
case 'A':
if(s[3]==s[2]||s[3]==s[4]||s[3]==s[6])return false;
break;
case 'B':
if(s[6]==s[2]||s[6]==s[3]||s[6]==s[4])return false;
break;
case 'C':
if(s[2]==s[3]||s[2]==s[4]||s[2]==s[6])return false;
break;
case 'D':
if(s[4]==s[2]||s[4]==s[3]||s[4]==s[6])return false;
break;
}
//第四题
switch(s[4])
{
case 'A':
if(s[1]!=s[5])return false;
break;
case 'B':
if(s[2]!=s[7])return false;
break;
case 'C':
if(s[1]!=s[9])return false;
break;
case 'D':
if(s[6]!=s[10])return false;
break;
}
//第五题
switch(s[5])
{
case 'A':
if(s[8]!='A')return false;
break;
case 'B':
if(s[4]!='B')return false;
break;
case 'C':
if(s[9]!='C')return false;
break;
case 'D':
if(s[7]!='D')return false;
break;
}
//第六题
switch(s[6])
{
case 'A':
if(!(s[8]==s[2]&&s[8]==s[4]))return false;
break;
case 'B':
if(!(s[8]==s[1]&&s[8]==s[6]))return false;
break;
case 'C':
if(!(s[8]==s[3]&&s[8]==s[10]))return false;
break;
case 'D':
if(!(s[8]==s[5]&&s[8]==s[9]))return false;
break;
}
//第七题
string smin;
calMin(smin);
switch(s[7])
{
case 'A':
if(smin.find("C")==string::npos)return false;
break;
case 'B':
if(smin.find("B")==string::npos)return false;
break;
case 'C':
if(smin.find("A")==string::npos)return false;
break;
case 'D':
if(smin.find("D")==string::npos)return false;
break;
}
//第八题
switch(s[8])
{
case 'A':
if(ifneighbor(s[1],s[7]))return false;
break;
case 'B':
if(ifneighbor(s[1],s[5]))return false;
break;
case 'C':
if(ifneighbor(s[1],s[2]))return false;
break;
case 'D':
if(ifneighbor(s[1],s[10]))return false;
break;
}
//第九题
switch(s[9])
{
case 'A':
if((s[1]==s[6])==(s[6]==s[5]))return false;
break;
case 'B':
if((s[1]==s[6])==(s[10]==s[5]))return false;
break;
case 'C':
if((s[1]==s[6])==(s[2]==s[5]))return false;
break;
case 'D':
if((s[1]==s[6])==(s[9]==s[5]))return false;
break;
}
//第十题
int d = maxminusmin();
switch(s[10])
{
case 'A':
if(d!=3)return false;
break;
case 'B':
if(d!=2)return false;
break;
case 'C':
if(d!=4)return false;
break;
case 'D':
if(d!=1)return false;
break;
}
return true;
}
void search(int m)
{
if(m>10)
{
if(check())
{
print();
//exit(0);
}
return;
}
s[m] = 'A';
search(m+1);
s[m] = 'B';
search(m+1);
s[m] = 'C';
search(m+1);
s[m] = 'D';
search(m+1);
}
int main()
{
s.reserve(11);
search(1);
return 0;
}