---
# System prepended metadata

title: Untitled

---

***程式小專題 電子雞自己猜數字***
首先看到這個詭異的題目 讓他一個一個暴力硬解
因此就衍伸出爆搜算法的解:
```
// Randomly generate numbers between 1 and 1000 for user to guess.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void guessGame(void); // function prototype
int isCorrect(int, int); // function prototype
int main(void)
{
   // srand( time( 0 ) ); // seed random number generator
   guessGame();
} // end main

// guessGame generates numbers between 1 and 1000
// and checks user's guess
void guessGame(void)
{
   int answer; // randomly generated number
   int guess=500; // user's guess
   int response; // 1 or 2 response to continue game
   int count=0;
   // loop until user types 2 to quit game
   do {
      // generate random number between 1 and 1000
      // 1 is shift, 1000 is scaling factor
      answer = 1 + rand() % 150;

      // prompt for guess
      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);
	  printf("以0開猜");
      // loop until correct number
      while (!isCorrect(guess, answer)) {
      	  count++;
		  guess=count;
		  printf("我猜是 %d \n",count);
	  }
         //scanf("%d", &guess);

      // prompt for another game
      puts("\nExcellent! You guessed the number!\n"
         "Would you like to play again?");
    //這裡是ASCII 圖案獎勵 
      printf("　　 ^_^_\n");
	  printf("　　 ( ω )　　起飛！\n");
      printf("　 　|　x \ \n");
	  printf("　　x└-o～o\n");
	  printf("\n");
	  printf("　　　｜｜　　\n");
	  printf("　 ＿ _　　／(＿＿_\n");
	  printf("／　 (＿＿＿_／　／ \n");
      printf("%s", "Please type ( 1=yes, 2=no )? ");
      scanf("%d", &response);
      count=0;
      puts("");
   } while (response == 1);
} // end function guessGame

// isCorrect returns true if g equals a
// if g does not equal a, displays hint
int isCorrect(int g, int a)
{
   // guess is correct
   if (g == a)
      return 1;

   // guess is incorrect; display hint
   if (g < a) {
      printf( "%s", "Too low. Try again.\n" );
  	  }
   else {
      printf( "%s", "Too high. Try again.\n" );
	  }
   return 0;
} // end function isCorrect
```
接下來 我就發現 ~~電腦快當機拉ㄚㄚㄚㄚㄚ!!!!~~
轉念間 我看到了 TOO HIGH!!! 所以我就決定把猜測時的 數字進行對半砍 所以就跑出了 二分搜的解法
```
// Randomly generate numbers between 1 and 1000 for user to guess.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void guessGame(void); // function prototype
int isCorrect(int, int); // function prototype
int hl=1;
int main(void)
{
   // srand( time( 0 ) ); // seed random number generator
   guessGame();
} // end main

// guessGame generates numbers between 1 and 1000
// and checks user's guess
void guessGame(void)
{
   int answer; // randomly generated number
   int guess=75; // user's guess
   int response; // 1 or 2 response to continue game
	 int tryf=1,tryl=150;
   // loop until user types 2 to quit game
   do {
      // generate random number between 1 and 1000
      // 1 is shift, 1000 is scaling factor
      //亂數最高到150 
      answer = 1 + rand() % 150;

      // prompt for guess
      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);
	  printf("以75開猜\n");
      // loop until correct number
      while (!isCorrect(guess, answer)) {
		  if (hl==1){
      			tryf=guess;
      			if ((tryl+tryf)%2!=0){
      				guess=(tryl+tryf-1)/2;
				  }
				if ((tryl+tryf)%2==0){
      				guess=(tryl+tryf)/2;
				  }
				printf("我猜是 %d \n",guess);
		  }
		  if (hl==0){
		  		tryl=guess;
      			if ((tryl+tryf)%2!=0){
      				guess=(tryl+tryf-1)/2;
				  }
				if ((tryl+tryf)%2==0){
      				guess=(tryl+tryf)/2;
				  }
				printf("我猜是 %d \n",guess);
			
		  }
	  }
         //scanf("%d", &guess);

      // prompt for another game
      puts("\nExcellent! You guessed the number!\n"
         "Would you like to play again?");
      //這裡是ASCII 圖案獎勵
      printf("　　 ^_^_\n");
	  printf("　　 ( ω )　　起飛！\n");
      printf("　 　|　x \ \n");
	  printf("　　x└-o～o\n");
	  printf("\n");
	  printf("　　　｜｜　　\n");
	  printf("　 ＿ _　　／(＿＿_\n");
	  printf("／　 (＿＿＿_／　／ \n");
      printf("%s", "Please type ( 1=yes, 2=no )? ");
      scanf("%d", &response);
	  tryf=1;
	  tryl=1000;
      puts("");
   } while (response == 1);
} // end function guessGame

// isCorrect returns true if g equals a
// if g does not equal a, displays hint
int isCorrect(int g, int a)
{
   // guess is correct
   if (g == a)
      return 1;

   // guess is incorrect; display hint
   if (g < a) {
      printf( "%s", "Too low. Try again.\n" );
      hl=1;
  	  }
   else {
      printf( "%s", "Too high. Try again.\n" );
	  hl=0;
	  }
   return 0;
} // end function isCorrect
```
這樣果然快多了 就這樣吧 交作業~