# String Manipulation# Greedy# Basic Math

c290 - APCS 2017-0304-1秘密差

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算一個十進位正整數的秘密差。秘密差定義為奇數位數的和 (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;
	}
}

Discussion