Untitled

 avatar
unknown
c_cpp
3 years ago
2.5 kB
6
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...