主题
最后登录1970-1-1
回帖0
精华
积分3
威望
RP
金钱 柯币
人气 ℃
注册时间2003-2-14
|
发表于 2006-6-20 18:55:40
|
显示全部楼层
回复: 听说是微软的面试题
根据计算机分析,答案是唯一的
cdebeedcba
以下是我编写的求解程序(这是用C++语言写的),大家有兴趣的话可以和我讨论
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std ;
vector <char> sq ;
bool q1()
{
for(int i = 2 ; i <= 6 ; i++)
if(sq == 'b')
return ( sq[1] == 'a'+i-2) ;
return false ;
}
bool q2()
{
int cnt = 0,j = 0 ;
for(int i = 2 ; i <= 10; i++)
if(sq == sq[i+1])
{
cnt++ ;
j = i ;
}
if(cnt != 1)
return false ;
return sq[2] == 'a'+j-2 ;
}
bool q3()
{
switch(sq[3])
{
case 'a': return sq[3] == sq[1] ;
case 'b': return sq[3] == sq[2] ;
case 'c': return sq[3] == sq[4] ;
case 'd': return sq[3] == sq[7] ;
case 'e': return sq[3] == sq[6] ;
}
return false ;
}
bool q4()
{
int cnt = 0 ;
for(int i =1 ; i < sq.size() ; i++)
if(sq == 'a')
cnt++ ;
return sq[4] == 'a'+cnt ;
}
bool q5()
{
switch(sq[5])
{
case 'a': return sq[5] == sq[10] ;
case 'b': return sq[5] == sq[9] ;
case 'c': return sq[5] == sq[8] ;
case 'd': return sq[5] == sq[7] ;
case 'e': return sq[5] == sq[6] ;
}
}
bool q6()
{
int cnta = count(&sq[1],&sq[11],'a') ;
switch(sq[6])
{
case 'a': return count(&sq[1],&sq[11],'b') == cnta ;
case 'b': return count(&sq[1],&sq[11],'c') == cnta ;
case 'c': return count(&sq[1],&sq[11],'d') == cnta ;
case 'd': return count(&sq[1],&sq[11],'e') == cnta ;
case 'e': for(char ch = 'b' ; ch <= 'e' ; ch++)
if(count(&sq[1],&sq[11],ch) == cnta)
return false ;
return true ;
}
}
bool q7()
{
return 4+'a'-sq[7] == abs(sq[8]-sq[7]) ;
}
bool q8()
{
int cnt = count(&sq[1],&sq[11],'a') + count(&sq[1],&sq[11],'e') ;
return sq[8] == cnt - 2 + 'a';
}
bool q9()
{
int cnt = 10 - count(&sq[1],&sq[11],'a') - count(&sq[1],&sq[11],'e') ;
switch(sq[9])
{
case 'a': return (cnt == 2||cnt == 3 || cnt == 5 || cnt == 7) ;
case 'b': return (cnt == 1 || cnt == 2 || cnt == 6) ;
case 'c': return (cnt == 1 || cnt == 4 || cnt == 9) ;
case 'd': return (cnt == 1 || cnt == 8) ;
case 'e': return (cnt%5 == 0) ;
}
}
void output()
{
for(int i = 1 ; i <= 10 ; i++)
cout << sq ;
cout << endl ;
}
bool test()
{
if(q1() &&q2() && q3() & q4() &&q5() && q6() & q7() &&q8() && q9() )
output() ;
}
void make_sq(const int &l)
{
if(l >10 )
{
test() ;
return ;
}
for(int ch = 'a' ; ch <= 'e' ; ch++)
{
sq[l] = ch ;
make_sq(l+1) ;
}
}
int main()
{
sq = vector<char>(11,'a') ;
make_sq(1) ;
system("pause") ;
return 0 ;
}
|
|