Untitled
unknown
c_cpp
3 years ago
2.5 kB
7
Indexable
#include<bits/stdc++.h>
using namespace std;
void prepare();
void ask();
void answer();
void think();
int ans[5040][4]; //store 10*9*8*7
int a,b; //store user's feedback
int randNum;
int remain;
int isOver;
int main()
{
prepare();
while(!isOver)
{
ask();
answer;
if(isOver)
{
break;
}
think();
cout << "-------------" << endl;
}
getchar();
return 0;
}
void prepare(){
int i,tmp,unit_1,unit_10,unit_100,unit_1000;
remain=5040;
tmp=0; //for counting randNum
isOver=0; //over or not
for(i=0;i<10000;i++){ //produce ans base
unit_1 = (i/1)%10; //split to 4 nums
unit_10 = (i/10)%10;
unit_100 = (i/100)%10;
unit_1000 = (i/1000)%10;
if(unit_1!=unit_10 && unit_1!=unit_100 && unit_1!=unit_1000 && unit_10!=unit_100 && unit_10!=unit_1000 && unit_100!=unit_1000){
ans[tmp][0] = unit_1000;
ans[tmp][1] = unit_100;
ans[tmp][2] = unit_10;
ans[tmp][3] = unit_1;
tmp++;
}
}
}
void ask(){
int i;
printf("I guess the number: ");
srand(time(0));
while(1==1){
randNum=0;
for(i=0;i<4;i++){
randNum *= 10;
randNum += rand()%10;
}
if(randNum<remain) break;
}
for(i=0;i<4;i++) printf("%d",ans[randNum][i]);
printf("?\n");
}
void answer()
{
char input[500];
cout << "A:";
fgets(input,sizeof(input),stdin);
*(input+strlen(input)-1)='\0';
cout << "B:";
fgets(input,sizeof(input),stdin);
*(input+strlen(input)-1)='\0';
if(a==4)
{
cout << "Nice! What a good game!" << endl;
isOver = 1;
}
}
void think(void){
int i,j,k,aa,bb;
int refer[4];
for(i=0;i<4;i++){
refer[i]=ans[randNum][i];
}
for(i=0;i<remain;i++){
aa = bb = 0; //
for(j=0;j<4;j++){ //compare
for(k=0;k<4;k++){
if(ans[i][j]==refer[k]){
if(j==k) aa++;
else bb++;
}
}
}
if(!((aa==a)&&(bb==b))){ //reamin the ans that a value equals b value
for(j=i;j<remain;j++){
for(k=0;k<4;k++){
ans[j][k]=ans[j+1][k];
}
}
remain--;
i--;
}
}
}
Editor is loading...