遊戲規則
- 隨機生成 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}$)
- 分數計算用浮點,最終取整
- 幫助可重複使用?題目暗示每次猜測可選一次幫助