# 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
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
.