将以上游戏(人机猜数游戏)双方倒一下,请人想一个四位的整数,计算机来猜,人给计算机提示信息,最终看计算机用几次猜出一个人“想”的数。请编程实现。
这个小游戏自己想了好久,也没怎么想出来解决的办法,o(︶︿︶)o 唉!看来自己好笨吖。。。。
结果让一个姐姐帮忙写了一个,自己还是没怎么看明白。。。痛苦~~~~
这个代码还需一步步研究吖!
#include <stdlib.h> #include <string.h> #include <stdio.h> int * dict = NULL; void dict_gen(void) { int a, b, c, d; int index; if(dict != NULL) { free(dict); } dict = malloc(sizeof(int) * 10 * 9 * 8 * 7); index = 0; for(a=0; a<10; a++) { for(b=0; b<10; b++) { if(b == a) continue; for(c=0; c<10; c++) { if(c == a || c == b) continue; for(d=0; d<10; d++) { if(d==a || d==b || d==c) continue; dict[index] = a << 24 | b << 16 | c << 8 | d; index++; } } } } } int check(int guess, int dst) { int A, B; int i; int j; int t; A = 0; B = 0; for(i=0; i<4; i++) { t = (guess >> (24-i*8)) & 0xff; for(j=0; j<4; j++) { if( ((dst>>(24-j*8)) & 0xff) == t ) { B++; } } if( t == ((dst>>(24-i*8)) & 0xff) ) { A++; } } B -= A; return A*10+B; } int main() { char buffer[1024]; int index; int A, B; int i; int count; int times; dict_gen(); index = 0; times = 0; while(1) { while(dict[index] == 0) { index ++; } printf("%d%d%d%d/n", (dict[index]>>24) & 0xff, (dict[index]>>16) & 0xff, (dict[index]>>8) & 0xff, (dict[index]) & 0xff); fflush(stdout); times ++; if(fgets(buffer, 1024, stdin) == NULL) { return -1; } buffer[5] = '/0'; A = buffer[0] - '0'; B = buffer[2] - '0'; if(A == 4) { printf("/nSuccess. guess %d times./n", times); fflush(stdout); return 0; } count = 0; for(i=index+1; i<10*9*8*7; i++) { if(check(dict[index], dict[i]) != A*10+B) { dict[i] = 0; } if(dict[i] != 0) { count ++; } } dict[index] = 0; } return 0; }
革命尚未成功,同志还需努力吖。。。。
my笨笨版猜数游戏
#include<iostream> using namespace std; bool used[10000]; char number[10000][5],temp[5]; int k=0,count[10000]; void chushi(int deep) { if(deep==4) { temp[deep]='/0'; strcpy(number[k++],temp); return ; } for(int i=0;i<10;i++) if(used[i]) { used[i]=false; temp[deep]=char(i+48); chushi(deep+1); used[i]=true; } } void check(char str1[],char str2[],int &A,int &B) { A=B=0; for(int i=0;i<4;i++) { if(str1[i]==str2[i]) { A++; continue; } for(int j=0;j<4;j++) if(str1[j]==str2[i]) B++; } } void counting(int v,int A,int B) { for(int i=0;i<10*9*8*7;i++) if(used[i]) { int a,b; check(number[v],number[i],a,b); if(A+B>0&&a==A&&b==B) count[i]++; if(A==0&&B==0&&a+b>0) count[i]=-1; } } int getnumber() { int i,j,max=-1; for(i=0;i<10*9*8*7;i++) if(used[i]&&max<count[i]) { j=i; max=count[i]; } used[j]=false; return j; } int main() { int i,a,b,j; memset(used,true,sizeof(used)); memset(count,0,sizeof(int)*10000); chushi(0); memset(used,true,sizeof(used)); while(1) { j=getnumber(); cout<<number[j]<<endl; cout<<"输入A和B的系数!"<<endl; cin>>a>>b; if(a==4) break; counting(j,a,b); } cout<<"哈哈我聪明吧!"<<endl; return 0; }
o(︶︿︶)o 唉
都是还需研究吖。。。。