ZeroJudge K645: 數學得力工具

Jasmine 是小學三年級的學生。她正在學習加法運算。

老師寫下了一串算式,學生們要計算出算式的總和。不過,這對 Jasmine 來說不夠。她才剛剛開始學數數,所以當加數以非遞減排序時,Jasmine 才能計算出算式的總和。例如:她不能計算出 1+3+2+1,但她能計算出 1+1+2+3。

你得到了寫在黑板上的算式。 重新排列算式並以 Jasmine 可以計算總和的方式打印。

範例測資

範例輸入範例輸出
輸入是一個非空字符串 s,黑板上的算式,字符串 s 不包含空格。 它只包含數字和字符「+」。 此外,字符串 s 是數字 1、2 和 3 的正確總和。字符串 s 的長度最多為 1000 個字符。打印 Jasmine 可以計算的新算式。
3+2+11+2+3
22

解題思路

使用字串來收算式,並且將數字獨立出來存到陣列中。如果陣列的資料只有一個的話就只輸出這個數字,否則就將陣列排序過後輸出,中間要有「+」。

範例程式碼-ZeroJudge K645: 數學得力工具

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int toint(string str) {
    if (str.length() == 1) return int(str[0] - '0');
    return stoi(str);
}

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    string str, tmp = "";
    cin >> str;
    vector<int>num;
    for (int i = 0; i<str.length(); i++) {
        if (str[i] == '+' && tmp.length() > 0) {
            num.push_back(toint(tmp));
            tmp = "";
        }
        tmp += str[i];
    }
    if (tmp.length() > 0) num.push_back(toint(tmp));
    sort(num.begin(), num.end());
    cout << num[0];
    if (num.size() > 1) {
        for (int i = 1; i<num.size(); i++) {
            cout << '+' << num[i];
        }
    }
    cout << "\n";
}

//ZeroJudge K645
//Dr. SeanXD

發佈留言