# APCS實作題2021年9月第1題:七言對聯 > 日期:2023年9月15日 > 作者:王一哲 > 題目來源:110年9月實作題第1題 > [ZeroJudge 題目連結](https://zerojudge.tw/ShowProblem?problemid=g275) <br /> ## 題目 ### 問題描述 中文依照發音方式可以分為平聲與仄聲,假設我們把平聲標記為 $0$ 而仄聲標記為 $1$。 一個七言對聯包含兩個句子,每個句子包含恰好七個字。 七言對聯有三個限制: A. 二四不同二六同:每一句第二、四個字必須不同平仄,而第二、六個字必須相同平仄。 B. 仄起平收:第一句的結尾必須為仄聲,第二句的結尾必須為平聲。 C. 上下相對:第一、二句的第二、四、六個字平仄必須不同 給你 $n$ 組對聯,分別用 $0$、$1$ 代表平仄,請輸出它違反了哪幾條規則,若以上規則皆無違反,請輸出None <br /> ### 輸入說明 輸入一個正整數 $n$ 代表對聯數量,接下來有 $2n$ 行,每行有 $7$ 個數字,數字不是 $0$ 就是 $1$。 <br /> ### 輸出說明 對於每個對聯,輸出一行表示它違反了哪些規則,若三個規則都遵守則輸出 None。 <br /> ### 範例一:輸入 ``` 1 1 1 0 0 0 1 1 1 0 0 0 1 1 0 ``` ### 範例一:正確輸出 ``` AC ``` <br /> ### 範例二:輸入 ``` 1 0 1 1 0 1 1 1 1 0 1 1 0 0 0 ``` ### 範例二:正確輸出 ``` None ``` <br /> ### 範例三:輸入 ``` 2 0 1 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 1 1 ``` ### 範例二:正確輸出 ``` AB ABC ``` <br /> ## Python 程式碼 於 ZeroJudge 測試結果,最長運算時間約為 20 ms,使用記憶體最多約為 3.4 MB,通過測試。 ```python= n = int(input()) for _ in range(n): first = list(map(int, input().split())) # 第一句 second = list(map(int, input().split())) # 第二句 ans = "" # 答案 # 若違反規則A,則 ans 加上 A if first[1] == first[3] or first[1] != first[5] or second[1] == second[3] or second[1] != second[5]: ans += "A" # 若違反規則B,則 ans 加上 B if first[6] == 0 or second[6] == 1: ans += "B" # 若違反規則C,則 ans 加上 C if first[1] == second[1] or first[3] == second[3] or first[5] == second[5]: ans += "C" # 若 ans 長度為0,表示符合所有規則,ans 重設為 None if len(ans) == 0: ans = "None" # 印出 ans print(ans) ``` <br /><br /> ## C++ 程式碼 於 ZeroJudge 測試結果,最長運算時間約為 3 ms,使用記憶體最多約為 340 kB,通過測試。 ```cpp= #include <iostream> #include <string> using namespace std; int main() { int n; cin >> n; for(int i=0; i<n; i++) { int first[7], second[7]; for(int j=0; j<7; j++) { cin >> first[j]; // 第一句 } for(int j=0; j<7; j++) { cin >> second[j]; // 第二句 } string ans = ""; // 答案 // 若違反規則A,則 ans 加上 A if (first[1] == first[3] || first[1] != first[5] || second[1] == second[3] || second[1] != second[5]) ans += "A"; // 若違反規則B,則 ans 加上 B if (first[6] == 0 || second[6] == 1) ans += "B"; // 若違反規則C,則 ans 加上 C if (first[1] == second[1] || first[3] == second[3] || first[5] == second[5]) ans += "C"; // 若 ans 是空字串,表示符合所有規則,ans 重設為 None if (ans.empty()) ans = "None"; // 印出 ans cout << ans << endl; } return 0; } ``` <br /><br /> --- ###### tags:`APCS`、`Python`、`C++`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.