需求:電腦產生 4 位不重複數字,玩家猜測,回饋 `xA yB` (A=位置數字皆對,B=數字對位置錯),直到 4A0B 結束並顯示猜測次數。
static string GenAnswer() {
var digits = "0123456789".ToCharArray();
var rnd = new Random();
for (int i = digits.Length - 1; i > 0; --i) {
int j = rnd.Next(i + 1);
(digits[i], digits[j]) = (digits[j], digits[i]);
}
return new string(digits, 0, 4); // 取前 4 個不重複數字
}
static (int A, int B) Judge(string ans, string guess) {
int a = 0, b = 0;
for (int i = 0; i < 4; ++i) {
if (ans[i] == guess[i]) a++;
else if (ans.Contains(guess[i])) b++;
}
return (a, b);
}
using System;
class Guess4AB {
static void Main() {
string ans = GenAnswer();
int times = 0;
Console.WriteLine("歡迎來到 4A4B 猜數字遊戲!輸入 4 位不重複數字,輸入 q 退出。");
while (true) {
Console.Write("請輸入猜測: ");
string input = Console.ReadLine()?.Trim();
if (input == "q") break;
if (input.Length != 4 || input.Distinct().Count() != 4 || !input.All(char.IsDigit)) {
Console.WriteLine("格式錯誤:需 4 位不重複數字。");
continue;
}
++times;
var (A, B) = Judge(ans, input);
Console.WriteLine($"{A}A{B}B");
if (A == 4) {
Console.WriteLine($"恭喜!答案是 {ans},共猜了 {times} 次。");
break;
}
}
}
// GenAnswer, Judge 如上
}
複製上方代碼即可跑起來玩,邏輯清晰、易於擴充 GUI 或加入提示功能。