【VC开源代码栏目提醒】:网学会员为需要VC开源代码的朋友们搜集整理了GuessAnswer.cpp相关资料,希望对各位网友有所帮助!
#include<iostream>
struct AnswerScope
{
int Num;
bool IfNumPossible;
};
class GuessAnswer
{
private:
int isA,isB,AnswerNum,times;//用户输入的A、B个数;可能答案的个数;用户猜的次数;
AnswerScope ans[9877];
public:
GuessAnswer();//构造函数
int ANumber(int,int,int,int,int);
int BNumber(int,int,int,int,int);
void ShowAnswer();//显示可能的答案
~GuessAnswer(){}//析构函数
};
GuessAnswer::GuessAnswer()
{
times=1;isA=0;isB=0;//AnswerNum=0;
int t,t1,t2,t3,t4;
for(t1=0;t1<10;t1++)
for(t2=0;t2<10;t2++)
for(t3=0;t3<10;t3++)
for(t4=0;t4<10;t4++)
{
t=1000*t1+100*t2+10*t3+t4;
ans[t].Num=t;
if((t1==t2)||(t1==t3)||(t1==t4)||(t2==t3)||(t2==t4)||(t3==t4))
ans[t].IfNumPossible=false;
else
ans[t].IfNumPossible=true;
}
}
//判断A的个数(数字t和n1,n2,n3,n4连接成的四位数)
int GuessAnswer::ANumber(int t,int n1,int n2,int n3,int n4)
{
int n=0;
//将t分解为4个数;
int m1=t/1000;
int m2=(t-m1*1000)/100;
int m3=(t-m1*1000-m2*100)/10;
int m4=t-m1*1000-m2*100-m3*10;
if(m1==n1)
n++;
if(m2==n2)
n++;
if(m3==n3)
n++;
if(m4==n4)
n++;
return n;
}
//判断B的个数(数字t和n1,n2,n3,n4连接成的四位数)
int GuessAnswer::BNumber(int t,int n1,int n2,int n3,int n4)
{
int n=0;
//将t分解为4个数;
int m1=t/1000;
int m2=(t-m1*1000)/100;
int m3=(t-m1*1000-m2*100)/10;
int m4=t-m1*1000-m2*100-m3*10;
if((m1==n2)||(m1==n3)||(m1==n4))
n++;
if((m2==n1)||(m2==n3)||(m2==n4))
n++;
if((m3==n1)||(m3==n2)||(m3==n4))
n++;
if((m4==n1)||(m4==n2)||(m4==n3))
n++;
return n;
}
void GuessAnswer::ShowAnswer()
{
int n,n1,n2,n3,n4,a,b;
do
{
// int n,n1,n2,n3,n4,a,b;
do
{
std::cout<<"第"<<times<<"次:"<<std::endl<<"请输入一个四位数,各位数字不能相同:"<<std::endl;
std::cin>>n;
n1=n/1000;
n2=(n-n1*1000)/100;
n3=(n-n1*1000-n2*100)/10;
n4=n-n1*1000-n2*100-n3*10;
}
while((n1==n2)||(n1==n3)||(n1==n4)||(n2==n3)||(n2==n4)||(n3==n4));
std::cout<<"请输入A和B的个数:"<<std::endl;
std::cin>>a>>b;
isA=a;isB=b;
std::cout<<"可能的答案有:"<<std::endl;
AnswerNum=0;
for(int t=123;t<9876;t++){
if((ANumber(t,n1,n2,n3,n4)!=isA)||(BNumber(t,n1,n2,n3,n4)!=isB))
ans[t].IfNumPossible=false;
else
if(ans[t].IfNumPossible==true)
{
AnswerNum++;
if(t<1000){
std::cout<<"0";//3位数第一位补0
}
std::cout<<t<<" ";
}
}
if(AnswerNum==0)
{
std::cout<<"请检查输入是否正确!"<<std::endl;
break;
}
std::cout<<"共有"<<AnswerNum<<"个可能的答案。"<<std::endl;
times++;
}
while(AnswerNum!=1);
std::cout<<"您一共猜了"<<--times<<"次。猜数字结束!"<<std::endl;
}
void main()
{
char command;
do
{
GuessAnswer m;
m.ShowAnswer();
std::cout<<std::endl;
std::cout<<"您想再来一次吗?Y/N"<<std::endl;
std::cin>>command;
}
while((command=='y')||(command=='Y'));
std::cout<<"谢谢您使用,再见!";
}