Let's look at the two sides of the above game (man-machine guess number game). Ask someone to think of a four-digit integer, ask the computer to guess, and ask the computer to prompt information, in the end, the computer used several times to guess a person's "number. Programming.
I have been thinking about this game for a long time, and I have not come up with a solution! It seems so stupid ....
As a result, I asked a sister to write one for help, but I still did not understand it... Pain ~~~~
This code still needs to be studied step by step!
# Include <stdlib. h> <br/> # include <string. h> <br/> # include <stdio. h> </p> <p> int * dict = NULL; </p> <p> void dict_gen (void) <br/>{< br/> int, b, c, d; <br/> int index; </p> <p> if (dict! = NULL) <br/>{< br/> free (dict); <br/>}</p> <p> dict = malloc (sizeof (int) * 10*9*8*7); </p> <p> index = 0; <br/> for (a = 0; a <10; a ++) <br/> {<br/> for (B = 0; B <10; B ++) <br/> {<br/> if (B =) continue; <br/> for (c = 0; c <10; c ++) <br/>{< br/> if (c = a | c = B) continue; <br/> for (d = 0; d <10; d ++) <br/>{< br/> if (d = a | d = B | d = c) continue; <br/> dict [index] = a <24 | B <16 | c <8 | D; <br/> index ++; <br/>}</p> <p> int check (int guess, int dst) <br/>{< br/> int A, B; <br/> int I; <br/> int j; <br/> int t; </p> <p> A = 0; <br/> B = 0; </p> <p> for (I = 0; I <4; I ++) <br/>{< br/> t = (guess> (24-i * 8) & 0xff; <br/> for (j = 0; j <4; j ++) <br/>{< br/> if (dst> (24-j * 8) & 0xff) = t) <br/>{< br/> B ++; <br/>}< br/> if (t = (dst> (24-i * 8) & 0 Xff) <br/>{< br/> A ++; <br/>}< br/> B-=; </p> <p> return A * 10 + B; <br/>}</p> <p> int main () <br/>{</p> <p> char buffer [1024]; <br/> int index; <br/> int A, B; <br/> int I; <br/> int count; <br/> int times; </p> <p> dict_gen (); </p> <p> index = 0; <br/> times = 0; </p> <p> while (1) <br/>{< br/> while (dict [index] = 0) <br/>{< br/> index ++; <br/>}</p> <p> printf ("% d/n", (dict [index]> 24) & 0xff, <br/> (dict [index]> 16) & 0xff, (dict [index]> 8) & 0xff, <br/> (dict [index]) & 0xff); <br/> fflush (stdout); </p> <p> times ++; </p> <p> if (fgets (buffer, 1024, stdin) = NULL) <br/>{< br/> return-1; <br/>}</p> <p> buffer [5] = '/0'; <br/> A = buffer [0]-'0 '; <br/> B = buffer [2]-'0'; </p> <p> if (A = 4) <br/> {<br/> printf ("/nSuccess. guess % d times. /n ", times); <br/> fflush (stdout); <br/> ret Urn 0; <br/>}</p> <p> count = 0; <br/> for (I = index + 1; I <10*9*8*7; I ++) <br/> {<br/> if (check (dict [index], dict [I])! = A * 10 + B) <br/>{< br/> dict [I] = 0; <br/>}< br/> if (dict [I]! = 0) <br/>{< br/> count ++; <br/>}< br/> dict [index] = 0; </p> <p >}</p> <p> return 0; </p> <p>}
The revolution has not yet succeeded. comrades still need to work hard ....
My stupid guess game
# Include <iostream> <br/> using namespace std; </p> <p> bool used [10000]; <br/> char number [10000] [5], temp [5]; <br/> int k = 0, count [10000]; </p> <p> void chushi (int deep) <br/> {<br/> if (deep = 4) <br/> {<br/> temp [deep] = '/0 '; <br/> strcpy (number [k ++], temp); <br/> return; <br/>}< br/> for (int I = 0; I <10; I ++) <br/> if (used [I]) <br/>{< br/> used [I] = false; <br/> temp [deep] = char (I + 48); <br/> chushi (deep + 1); <br/> used [I] = tru E; <br/>}</p> <p> void check (char str1 [], char str2 [], int & A, int & B) <br/> {<br/> A = B = 0; <br/> for (int I = 0; I <4; I ++) <br/>{< br/> if (str1 [I] = str2 [I]) <br/>{< br/> A ++; <br/> continue; <br/>}< br/> for (int j = 0; j <4; j ++) <br/> if (str1 [j] = str2 [I]) <br/> B ++; <br/>}</p> <p> void counting (int v, int A, int B) <br/> {<br/> for (int I = 0; I <10*9*8*7; I ++) <br/> if (used [I]) <br/>{< br/> int a, B; <br/> check (number [V], number [I], a, B); <br/> if (A + B> 0 & a = A & B = B) <br/> count [I] ++; <br/> if (A = 0 & B = 0 & a + B> 0) <br/> count [I] =-1; <br/>}</p> <p> int getnumber () <br/> {<br/> int I, j, max =-1; <br/> for (I = 0; I <10*9*8*7; I ++) <br/> if (used [I] & max <count [I]) <br/>{< br/> j = I; <br/> max = count [I]; <br/>}< br/> used [j] = false; <br/> return j; <br/>}</p> <p> int main () <br/> {<br/> int I, a, B, j; <br/> memset (used, true, sizeof (used); <br /> Memset (count, 0, sizeof (int) * 10000); <br/> chushi (0); <br/> memset (used, true, sizeof (used); <br/> while (1) <br/>{< br/> j = getnumber (); <br/> cout <number [j] <endl; <br/> cout <"Enter the coefficient of A and B! "<Endl; <br/> cin> a> B; <br/> if (a = 4) <br/> break; <br/> counting (j, a, B); <br/>}< br/> cout <"Haha, I am smart! "<Endl; <br/> return 0; <br/>}
O (zookeeper) o alas
Still need to study ....