# 程式小專題:電子雞 先跑一次程式,就可以知道要把手動輸入scanf的地方改掉,改成電腦可以自己判斷的公式。 ```cpp= puts("I have a number between 1 and 1000.\n" "Can you guess my number?\n" "Please type your first guess."); printf("%s", "? "); scanf("%d", &guess);//這邊 while (!isCorrect(guess, answer)) scanf("%d", &guess);//要改掉 ``` 因為跟第四次上機考的程式有點類似,所以我先把第四次上機考跟上面程式碼類似的地方寫出來 ```cpp= int guess(int num) { if(num == res) return 3; else if(num > res) return 2; else if(num < res) return 1; else return 0; } int solve() { int left=1,right=range; int mid; while(left<=right){ mid=left+(right-left)/2; if(guess(mid)==3) return mid; if(guess(mid)==1) left=mid+1; else right=mid; } return 1; } ``` 類似的功能是這兩個function,因此我將原本要輸入的部分用solve替換,之後再加上可以計算次數的功能 ```cpp= int solve(answer) { int left=1,right=1000; int mid=0; int i=1; while(left<=right){ mid=left+(right-left)/2; printf("\ncount:%d guessNumber:%d\n",i,mid); i++; if(guess(mid,answer)==3) break; if(guess(mid,answer)==1) { left=mid+1; printf( "%s", "Too low. Try again.\n? " ); } else { right=mid; printf( "%s", "Too high. Try again.\n? " ); } } return 1; } ``` 最後再根據題目要求加入ASCII的圖案 ```cpp= void ascii(){ printf("________00000000000___________000000000000_________\n"); printf("______00000000_____00000___000000_____0000000______\n"); printf("____0000000_____________000______________00000_____\n"); printf("___0000000_______________0_________________0000____\n"); printf("__000000____________________________________0000___\n"); printf("__00000_____________________________________ 0000__\n"); printf("_00000______________________________________00000__\n"); printf("_00000_____________________________________000000__\n"); printf("__000000_________________________________0000000___\n"); printf("___0000000______________________________0000000____\n"); printf("_____000000____________________________000000______\n"); printf("_______000000________________________000000________\n"); printf("__________00000_____________________0000___________\n"); printf("_____________0000_________________0000_____________\n"); printf("_______________0000_____________000________________\n"); printf("_________________000_________000___________________\n"); printf("_________________ __000_____00_____________________\n"); printf("______________________00__00_______________________\n"); printf("________________________00_________________________\n"); } ``` 以下是完整的程式碼 ```cpp= #include <stdio.h> #include <stdlib.h> #include <time.h> void guessGame(void); int guess(int mid,int answer); int main(void){ guessGame(); } void guessGame(void){ int answer; int response; int solve(int answer); void ascii(); do { answer = 1 + rand() % 1000; puts("I have a number between 1 and 1000.\n" "Can you guess my number?\n" "Please type your first guess."); printf("%s", "? "); solve(answer); ascii(); puts("\nExcellent! You guessed the number!\n" "Would you like to play again?"); printf("%s", "Please type ( 1=yes, 2=no )? "); scanf("%d", &response); puts(""); } while (response == 1); } void ascii(){ printf("________00000000000___________000000000000_________\n"); printf("______00000000_____00000___000000_____0000000______\n"); printf("____0000000_____________000______________00000_____\n"); printf("___0000000_______________0_________________0000____\n"); printf("__000000____________________________________0000___\n"); printf("__00000_____________________________________ 0000__\n"); printf("_00000______________________________________00000__\n"); printf("_00000_____________________________________000000__\n"); printf("__000000_________________________________0000000___\n"); printf("___0000000______________________________0000000____\n"); printf("_____000000____________________________000000______\n"); printf("_______000000________________________000000________\n"); printf("__________00000_____________________0000___________\n"); printf("_____________0000_________________0000_____________\n"); printf("_______________0000_____________000________________\n"); printf("_________________000_________000___________________\n"); printf("_________________ __000_____00_____________________\n"); printf("______________________00__00_______________________\n"); printf("________________________00_________________________\n"); } int solve(answer) { int left=1,right=1000; int mid=0; int i=1; while(left<=right){ mid=left+(right-left)/2; printf("\ncount:%d guessNumber:%d\n",i,mid); i++; if(guess(mid,answer)==3) break; if(guess(mid,answer)==1) { left=mid+1; printf( "%s", "Too low. Try again.\n? " ); } else { right=mid; printf( "%s", "Too high. Try again.\n? " ); } } return 1; } int guess(int mid,int answer) { if(mid == answer) return 3; else if(mid > answer) return 2; else if(mid < answer) return 1; else return 0; } ```