?? 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<<"謝謝您使用,再見!";
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -