---
# System prepended metadata

title: 小專題1 電子雞自己猜數字 D1177960

---

# 小專題1 電子雞自己猜數字 D1177960
## 原來的模板
#### 以下為一個可以跟電腦互動的猜數字小遊戲 (Randomly generate numbers between 1 and 1000 for user to guess)
#### replit連結: https://replit.com/@6581639/Cai-Shu-Zi#main.c
``` C=
// 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; // user's guess
   int response; // 1 or 2 response to continue game

   // 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() % 1000;

      // 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);

      // loop until correct number
      while (!isCorrect(guess, answer)) 
         scanf("%d", &guess);

      // prompt for another game
      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);
} // 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
```
## 策略 1
#### 直接砍半從500開始猜數字, 要是答案小於500, 那就500開始減1直到猜到數字為止, 相反要是答案大於500, 那就一直加1
#### replit連結: https://replit.com/@6581639/Dian-Zi-Ji-Zi-Ji-Cai-Shu-Zi#main.c
```C=
// 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
void ASCII(); // funcyion ASCII

int main(void){ 
  // prompt for guess
  puts("歡迎來到電子雞自己猜數字");
  puts("一個看電腦自己猜數字的程式 順便浪費時間");
  // 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; // user's guess
    int response; // 1 or 2 response to continue game
    // 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() % 1000;

        puts("\n===============開始浪費時間===============");

        //count from 500
        guess = 500;
        printf("%d\n",guess);
      
        int call = isCorrect(guess, answer); //
        int guesstimes = 1; //count the guesses
        // loop until correct number
        while (call != 1){ //if not case 1, star case 2 or case 3
          
          if (call == 2){  //case 2, when the answer is higher than guess
            guess++;
            printf("%d\n",guess);
            call = isCorrect(guess, answer);
            guesstimes++;
            }

          else if (call == 3){ //case 3, when the answer is lesser than guess
            guess--;
            printf("%d\n",guess);
            call = isCorrect(guess, answer);
            guesstimes++;
            }
          }
      
        ASCII(); //ASCII function
      
        puts("終於猜到數字了\n");
        printf("電腦總共猜了%d次\n", guesstimes);
        puts("你想再浪費一次時間嗎?");
        printf("想(請輸入1) 不想(請輸入2)");
        scanf("%d", &response);
      
    } 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("太小了\n");
        return 2;
  
    }else{
        printf("太大了\n");
        return 3;
    }
    return 0;
} // end function isCorrect
//if guess is correct , print correct_banner

void ASCII(){ //star ASCII function
  printf("        _=====_                               _=====_ \n");
  printf("       / _____ \\                             / _____ \\ \n");
  printf("     +.-'_____'-.---------------------------.-'_____'-.+ \n");
  printf("    /   |     |  '.        S O N Y        .'  |  _  |   \\ \n");
  printf("   / ___| /|\\ |___ \\                     / ___| /_\\ |___ \\ \n");
  printf("  / |      |      | ;  __           _   ; | _         _ | ; \n");
  printf("  | | <---   ---> | | |__|         |_:> | ||_|       (_)| |⠀\n");
  printf("  | |___   |   ___| ;SELECT       START ; |___       ___| ;⠀\n");
  printf("  |\\    | \\|/ |    /  _     ___      _   \\    | (X) |    /|⠀\n");
  printf("  | \\   |_____|  .','" "', |___|  ,'" "', '.  |_____|  .' |⠀\n");
  printf("  |  '-.______.-' /       \\ANALOG/       \\  '-._____.-'   | \n");
  printf("  |               |       |------|       |                |⠀\n");
  printf("  |              /\\       /      \\       /\\               | \n");
  printf("  |             /  '.___.'        '.___.'  \\              | \n");
  printf("  |            /                            \\             | \n");
  printf("   \\          /                              \\           / \n");
  printf("    \\________/                                \\_________/ \n");         
} //end ASCII function
```
## 策略 2
#### 直接讓電腦隨機猜 1~1000, 就一直隨便猜, 所以有可能會猜無限次, 這個程式當純時來浪費時間的
#### replit連結: https://replit.com/@6581639/Dian-Zi-Ji-Zi-Ji-Cai-Shu-Zi-2#main.c
``` C=
// 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
void ASCII(); // funcyion ASCII

int main(void){
  // prompt for guess
  puts("歡迎來到電子雞自己猜數字");
  puts("一個看電腦自己猜數字的程式 順便浪費時間");
  // 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; // user's guess
    int response; // 1 or 2 response to continue game
    // 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() % 1000;
    
        puts("\n===============開始浪費時間===============");

        // guess a random number
        guess = 1 + rand() % 1000;
        printf("%d\n",guess);
      
        int call = isCorrect(guess, answer);
        int guesstimes = 1; //count the guesses
        // loop until correct number
        while (call != 1){ //if not case 1, star case 2 or case 3
          
          guess = 1 + rand() % 1000;// guess == random number
          
          if (call == 2){  //case 2, when the answer is higher than guess
            printf("%d\n",guess);
            call = isCorrect(guess, answer);
            guesstimes++;
            }

          else if (call == 3){ //case 3, when the answer is lesser than guess
            printf("%d\n",guess);
            call = isCorrect(guess, answer);
            guesstimes++;
            }
          }
      
        ASCII(); //ASCII function
      
        puts("終於猜到數字了\n");
        printf("電腦總共猜了%d次\n", guesstimes);
        puts("你想再浪費一次時間嗎?");
        printf("想(請輸入1) 不想(請輸入2)");
        scanf("%d", &response);
      
    } 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("太小了\n");
        return 2;
  
    }else{
        printf("太大了\n");
        return 3;
    }
    return 0;
} // end function isCorrect
//if guess is correct , print correct_banner

void ASCII(){ //star ASCII function
  printf("        _=====_                               _=====_ \n");
  printf("       / _____ \\                             / _____ \\ \n");
  printf("     +.-'_____'-.---------------------------.-'_____'-.+ \n");
  printf("    /   |     |  '.        S O N Y        .'  |  _  |   \\ \n");
  printf("   / ___| /|\\ |___ \\                     / ___| /_\\ |___ \\ \n");
  printf("  / |      |      | ;  __           _   ; | _         _ | ; \n");
  printf("  | | <---   ---> | | |__|         |_:> | ||_|       (_)| |⠀\n");
  printf("  | |___   |   ___| ;SELECT       START ; |___       ___| ;⠀\n");
  printf("  |\\    | \\|/ |    /  _     ___      _   \\    | (X) |    /|⠀\n");
  printf("  | \\   |_____|  .','" "', |___|  ,'" "', '.  |_____|  .' |⠀\n");
  printf("  |  '-.______.-' /       \\ANALOG/       \\  '-._____.-'   | \n");
  printf("  |               |       |------|       |                |⠀\n");
  printf("  |              /\\       /      \\       /\\               | \n");
  printf("  |             /  '.___.'        '.___.'  \\              | \n");
  printf("  |            /                            \\             | \n");
  printf("   \\          /                              \\           / \n");
  printf("    \\________/                                \\_________/ \n");         
} //end ASCII function
```
## 策略 3
#### 輸入一個最大值和一個最小值, 之後根據猜的數字大小更換猜測的範圍
#### replit連結: https://replit.com/@6581639/Dian-Zi-Ji-Zi-Ji-Cai-Shu-Zi-3#main.c
```C=
// 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
void ASCII(); // funcyion ASCII

int main(void){
  // prompt for guess
  puts("歡迎來到電子雞自己猜數字");
  puts("一個看電腦自己猜數字的程式 順便浪費時間");
  // 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; // user's guess
    int response; // 1 or 2 response to continue game
    // 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() % 1000;
      
        puts("\n===============開始浪費時間===============");

        // guess a random number
        guess = 1 + rand() % 1000;
        printf("%d\n",guess);

        int max=1000, min=1;
        int call = isCorrect(guess, answer); //
        int guesstimes = 1; //count the guesses
        // loop until correct number
        while (call != 1){ //if not case 1, star case 2 or case 3
          
          if (call == 2){  //case 2, when the answer is higher than guess
            printf("%d\n",guess);
            min = guess + 1;
            guesstimes++;
            }

          else if (call == 3){ //case 3, when the answer is lesser than guess
            printf("%d\n",guess);
            max = guess - 1;
            guesstimes++;
            }
          
          guess = rand()%(max-min+1) + min; // a number between min and max
          call = isCorrect(guess, answer);
          }
      
        ASCII(); //ASCII function
      
        puts("終於猜到數字了\n");
        printf("電腦總共猜了%d次\n", guesstimes);
        puts("你想再浪費一次時間嗎?");
        printf("想(請輸入1) 不想(請輸入2)");
        scanf("%d", &response);
      
    } 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("太小了\n");
        return 2;
  
    }else{
        printf("太大了\n");
        return 3;
    }
    return 0;
} // end function isCorrect
//if guess is correct , print correct_banner

void ASCII(){ //star ASCII function
  printf("        _=====_                               _=====_ \n");
  printf("       / _____ \\                             / _____ \\ \n");
  printf("     +.-'_____'-.---------------------------.-'_____'-.+ \n");
  printf("    /   |     |  '.        S O N Y        .'  |  _  |   \\ \n");
  printf("   / ___| /|\\ |___ \\                     / ___| /_\\ |___ \\ \n");
  printf("  / |      |      | ;  __           _   ; | _         _ | ; \n");
  printf("  | | <---   ---> | | |__|         |_:> | ||_|       (_)| |⠀\n");
  printf("  | |___   |   ___| ;SELECT       START ; |___       ___| ;⠀\n");
  printf("  |\\    | \\|/ |    /  _     ___      _   \\    | (X) |    /|⠀\n");
  printf("  | \\   |_____|  .','" "', |___|  ,'" "', '.  |_____|  .' |⠀\n");
  printf("  |  '-.______.-' /       \\ANALOG/       \\  '-._____.-'   | \n");
  printf("  |               |       |------|       |                |⠀\n");
  printf("  |              /\\       /      \\       /\\               | \n");
  printf("  |             /  '.___.'        '.___.'  \\              | \n");
  printf("  |            /                            \\             | \n");
  printf("   \\          /                              \\           / \n");
  printf("    \\________/                                \\_________/ \n");         
} //end ASCII function
```