c290 - APCS 2017-0304-1秘密差
題目描述
題目要求計算一個十進位正整數的秘密差。秘密差定義為奇數位數的和 (A) 與偶數位數的和 (B) 的絕對差值 |A - B|。
解題思路
程式碼首先讀取一個正整數的字串。然後,它根據字串長度的奇偶性,分別計算奇數位數和偶數位數的和。最後,計算這兩個和的絕對差值並輸出。程式碼使用迴圈迭代字串中的每個字元,並將其轉換為整數後加到相應的和中。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。因為程式碼需要遍歷字串一次來計算奇數位數和偶數位數的和。
- 空間複雜度: O(1),因為程式碼只使用了幾個整數變數來儲存和,空間使用不隨輸入大小變化。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
int A,B=0;
string a;
while(cin >> a){
if(a.length()%2==1){
for(int i=0;i<a.length();i+=2){
A+=(a[i]-48);
}
for(int i=1;i<a.length()-1;i+=2){
B+=(a[i]-48);
}
}
else{
for(int i=0;i<a.length()-1;i+=2){
A+=(a[i]-48);
}
for(int i=1;i<a.length();i+=2){
B+=(a[i]-48);
}
}
if(A>=B){
cout << A-B << endl;
}
else{
cout << B-A << endl;
}
A=0;B=0;
}
}