日期:2025年10月25日
ZeroJudge 題目連結:f821. nAnB ( 正常版 )
解題想法
這題的數字不會重複,寫起來簡單很多。假設數字、位置皆相同的數量為 a,數字相同、位置不同的數量為 b,依序讀取猜測字串中的每個字元,先比較這個字元與答案中同樣位置的字元是否相同,如果相同則 a 加 1;如果前一個條件不成立,再檢查這個數字是否在答案當中,如果有則 b 加 1。
Python 程式碼
使用時間約為 19 ms,記憶體約為 3.3 MB,通過測試。
ans, m = input().split() # 正確答案,詢問筆數
n = len(ans) # 答案的字數
for _ in range(int(m)): # 執行 m 次
guess = input() # 猜測的數字
a, b = 0, 0 # 數字、位置皆正確的數量,數字正確、位置錯誤的數量
for i, c in enumerate(guess): # 依序取出 guess 的數字
if ans[i] == c: a += 1 # 數字、位置皆正確
elif c in ans: b += 1 # 數字正確、位置錯誤
print(f"{a:d}A{b:d}B")
C++ 程式碼
使用時間約為 3 ms,記憶體約為 352 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
string ans; int m; cin >> ans >> m; // 正確答案,詢問筆數
int n = (int)ans.size(); // 答案的字數
for(int i=0; i<m; i++) { // 執行 m 次
string guess; cin >> guess; // 猜測的數字
int a = 0, b = 0; // 數字、位置皆正確的數量,數字正確、位置錯誤的數量
for(int j=0; j<n; j++) { // 依序取出 guess 的數字
if (ans[j] == guess[j]) a++; // 數字、位置皆正確
else if (ans.find(guess[j]) != string::npos) b++; // 數字正確、位置錯誤
}
cout << a <<"A" << b << "B\n";
}
return 0;
}
沒有留言:
張貼留言