#include <iostream.h> #include <string.h> int s[24]={ 1234,1243,1324,1342,1432,1423, 2134,2143,2314,2341,2431,2413, 3214,3241,3124,3142,3412,3421, 4231,4213,4321,4312,4132,4123}; int comp(int a,int b,int c,int d) { char s[5]; cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl; cin>>s; return s[0]-‘0’+s[2]-‘0’; } int comp2(int a,int b,int c,int d) { char s[5]; cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl; cin>>s; if(s[0]!=4)//顺序还没有完全对 return 0; else return 1; } int main() { int i,j; int guess[10]; int num[10]; int total=0; int mydate[4]; int x1,x2,x3,x4,x5,x6; for(i=0;i<10;i++) num[i]=0; for(i=0;i<10;i++) guess[i]=i; x1=comp(guess[0],guess[1],guess[2],guess[3]); if(x1==0) { x6=comp(guess[0],guess[1],guess[2],guess[4]); if(x6!=0) { num[4]=1; total++; } } else if(x1==4) { num[0]=1; num[1]=1; num[2]=1; num[3]=1; total+=4; goto loop; } else { x2=comp(guess[4],guess[1],guess[2],guess[3]); x3=comp(guess[0],guess[4],guess[2],guess[3]); x4=comp(guess[0],guess[1],guess[4],guess[3]); x5=comp(guess[0],guess[1],guess[2],guess[4]); if(x2+x3+x4+x5>4*x1) { num[4]=1; total+=1; if(x1==x2) { num[0]=1; total++; } if(x1==x3) { num[1]=1; total++; } if(x1==x4) { num[2]=1; total++; } if(x1==x5) { num[3]=1; total++; } } else { if(x1>x2) { num[0]=1; total++; } if(x1>x3) { num[1]=1; total++; } if(x1>x4) { num[2]=1; total++; } if(x1>x5) { num[3]=1; total++; } } } //0,1,2,3,4已经确定是否出现。 x1=comp(guess[5],guess[6],guess[7],guess[8]); if(x1==0) { x6=comp(guess[5],guess[6],guess[7],guess[9]); if(x6!=0) { num[9]=1; total++; } } else if(x1==4) { num[5]=1; num[6]=1; num[7]=1; num[8]=1; total+=4; goto loop; } else { x2=comp(guess[9],guess[6],guess[7],guess[8]); x3=comp(guess[5],guess[9],guess[7],guess[8]); x4=comp(guess[5],guess[6],guess[9],guess[8]); x5=comp(guess[5],guess[6],guess[7],guess[9]); if(x2+x3+x4+x5>4*x1) { num[9]=1; total+=1; if(x1==x2) { num[5]=1; total++; } if(x1==x3) { num[6]=1; total++; } if(x1==x4) { num[7]=1; total++; } if(x1==x5) { num[8]=1; total++; } } else { if(x1>x2) { num[5]=1; total++; } if(x1>x3) { num[6]=1; total++; } if(x1>x4) { num[7]=1; total++; } if(x1>x5) { num[8]=1; total++; } } } loop: j=0; for(i=0;i<10;i++) if(num[i]==1) { mydate[j]=i; j++; } i=0; while(1) { x1=s[i]/1000-1; x2=s[i]/100%10-1; x3=s[i]/10%10-1; x4=s[i]%10-1; if(comp2(mydate[x1],mydate[x2],mydate[x3],mydate[x4])==1) { cout<<"I get it,it is:"; cout<<mydate[x1]<<" "<<mydate[x2]<<" " <<mydate[x3]<<" "<<mydate[x4]<<endl; return 0; } i+=1; } } PS: 改了下程序,明天上机测试下. 说明: 首先你自己随便想4个数字,要求是4个数字的范围0-9且各不相同,但有顺序。要你猜这4个数字。电脑会猜你想的数字,对电脑每次猜的数字你要给一个评价.评价规则为:如果电脑猜的数字中一个数字和你给的数字相同且位置相同就得一个A,如果猜对了数字但位置不对就得一个B.电脑会一直猜直到猜中你想的数字. 最坏的情况电脑可能要猜36次,所以整天要你输入评价,还蛮麻烦的.所以测试这个程序并不简单.. 相关文章: 猜数字游戏(解释) http://blog.programfan.com/article.asp?id=16825 对置顶贴猜数字的一点解释. http://blog.programfan.com/article.asp?id=16842

评论