首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言猜數字遊戲:隨機生成、分級提示、百分制計分完整實現

     編輯:程式設計疑難解答

遊戲規則

  • 隨機生成 1000-9999 四位數
  • 7 次猜測機會,失敗 0 分
  • 兩種幫助:位置對錯(R/E,扣 10%)、正確數字(扣 10%)
  • 初始 100 分,最終最高分獲勝

核心邏輯

1. 隨機數生成


srand((unsigned)time(NULL));
int target = rand() % 9000 + 1000; // 1000-9999

2. 位置判斷(R/E)


char* checkPosition(int guess, int target) {
    static char result[5];
    char g[5], t[5];
    sprintf(g, "%04d", guess);
    sprintf(t, "%04d", target);
    for (int i = 0; i < 4; i++) {
        result[i] = (g[i] == t[i]) ? 'R' : 'E';
    }
    result[4] = '\0';
    return result;
}

3. 正確數字判斷


void checkDigits(int guess, int target, char* correctDigits) {
    int g[10] = {0}, t[10] = {0};
    while (guess) { g[guess%10]++; guess/=10; }
    while (target) { t[target%10]++; target/=10; }
    int idx = 0;
    for (int d = 0; d <= 9; d++) {
        if (g[d] && t[d]) correctDigits[idx++] = '0' + d;
    }
    correctDigits[idx] = '\0';
}

4. 計分邏輯


double score = 100.0;
if (usePositionHelp) score *= 0.9;   // 扣 10%
if (useDigitHelp)    score *= 0.9;   // 扣 10%
// 猜對得 score,7 次未猜對得 0

完整流程圖


開始 → 生成隨機數 → 循環7次:
    輸入猜測 → 判斷全對? → 是:輸出分數 結束
    否:詢問幫助類型 → 執行判斷 → 扣分 → 輸出提示
    次數歸零 → 輸出0分 結束

Java 參考實現(邏輯同 C)


import java.util.*;
public class GuessGame {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int target = new Random().nextInt(9000) + 1000;
        double score = 100;
        for (int round = 7; round > 0; round--) {
            System.out.print("請輸入4位數: ");
            int guess = sc.nextInt();
            if (guess == target) { System.out.println("得分: " + (int)score); break; }
            System.out.println("需要幫助?1-位置 2-數字 0-無");
            int help = sc.nextInt();
            if (help == 1) { score *= 0.9; /* 輸出R/E*/ }
            else if (help == 2) { score *= 0.9; /* 輸出正確數字*/ }
            System.out.println("剩餘機會: " + (round-1));
        }
    }
}

常見坑點

  • rand() 未播種導致每次相同序列
  • 輸入非 4 位數需校驗(正則 ^\d{4}$)
  • 分數計算用浮點,最終取整
  • 幫助可重複使用?題目暗示每次猜測可選一次幫助
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved