# APCS實作題2017年3月第1題:秘密差 > 第1版:2023年2月14日 > 第2版:2023年6月6日,加上 C++ 程式碼 > 作者:王一哲 > 題目來源:[106年3月4日實作題第1題](https://apcs.csie.ntnu.edu.tw/wp-content/uploads/2018/12/1060304APCSImplementation.pdf) > [ZeroJudge 題目連結](https://zerojudge.tw/ShowProblem?problemid=c290) <br /> ## 題目 ### 問題描述 將一個十進位正整數的奇數位數的和稱為 $A$,偶數位數的和稱為 $B$,則 $A$ 與 $B$ 的絕對差值 $|A-B|$ 稱為這個正整數的秘密差。 例如:263541 的奇數位數的和 $A = 6+5+1 = 12$,偶數位數的和 $B = 2+3+4 = 9$,所以 263541 的秘密差是 $|12-9| = 3$。 給定一個十進位正整數 X,請找出 X 的秘密差。 <br /> ### 輸入格式 輸入為一行含有一個十進位表示法的正整數 X,之後是一個換行字元。 <br /> ### 輸出格式 請輸出 X 的秘密差 Y(以十進位表示法輸出),以換行字元結尾。 <br /> ### 範例一:輸入 ``` 263541 ``` ### 範例一:正確輸出 ``` 3 ``` (說明)263541 的 $A = 6+5+1 = 12$,$B = 2+3+4 = 9$,$|A-B| = |12-9| = 3$。 <br /> ### 範例二:輸入 ``` 131 ``` ### 範例二:正確輸出 ``` 1 ``` (說明)131 的 $A = 1+1 = 2$,$B = 3$,$|A-B| = |2-3| = 1$。 <br /> ### 評分說明 輸入包含若干筆測試資料,每一筆測試資料的執行時間限制(time limit)均為 1 秒,依正確通過測資筆數給分。其中: - 第 1 子題組 20 分:X 一定恰好四位數。 - 第 2 子題組 30 分:X 的位數不超過 9。 - 第 3 子題組 50 分:X 的位數不超過 1000。 <br /> ## Python 程式碼 ```python= data = input() # 沒有最後的換行字元 A, B = 0, 0 for i in range(len(data)): if i%2 == 0: A += int(data[i]) else: B += int(data[i]) print(abs(A-B)) ``` <br /> 1. 第1行:由標準輸入讀取資料,以字串格式儲存於變數 data。 2. 第2行:産生變數A、B,用來儲存奇數或偶數位數的總合。 3. 第4 ~ 6行:依序讀取 data 中的字元,如果是偶數次將數值加到變數A,如果是奇數次將數值加到變數B。 4. 第8行:印出 $|A-B|$,這是提交程式碼測試時維一印出的值。 5. 於 ZeroJudge 測試結果,每筆測資費時約 18 ms,使用記憶體 3.4 MB。 <br /><br /> ## C++ 程式碼 ```cpp= #include <iostream> #include <string> #include <cmath> using namespace std; int main() { string data; int A = 0, B = 0; cin >> data; int len = data.length(); for(int i=0; i<len; i++) { int t = int(data[i]-'0'); if (i%2 == 0) A += t; else B += t; } cout << (abs(A-B)) << endl; return 0; } ``` <br /> 1. 第2行:引入字串函式庫 string,才能在第7行定義字串格式的變數 data,在第9行由標準輸入讀取資料,儲存於變數 data。 2. 第3行:引入數學函式庫 cmath,才能在第18行使用計算絕對值的函式 abs。 3. 第10行:取得 data 的長度並儲存到整數變數 len。 4. 第12 ~ 16行:依序由 data 讀取每一個字元,為了將字元轉成對應的整數值,要先**減去字元 '0'**,再轉型成整數,儲存到整數變數 t。如果是偶數位數,加到整數變數 A;如果是奇數位數,加到整數變數 B。 5. 第18行:印出 $|A-B|$,這是提交程式碼測試時維一印出的值。 6. 於 ZeroJudge 測試結果,每筆測資費時約 3 ms,使用記憶體 336 kB。 <br /><br /> --- ###### tags:`APCS`、`Python`、`C++`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up