Jasmine 是小學三年級的學生。她正在學習加法運算。
老師寫下了一串算式,學生們要計算出算式的總和。不過,這對 Jasmine 來說不夠。她才剛剛開始學數數,所以當加數以非遞減排序時,Jasmine 才能計算出算式的總和。例如:她不能計算出 1+3+2+1,但她能計算出 1+1+2+3。
你得到了寫在黑板上的算式。 重新排列算式並以 Jasmine 可以計算總和的方式打印。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入是一個非空字符串 s,黑板上的算式,字符串 s 不包含空格。 它只包含數字和字符「+」。 此外,字符串 s 是數字 1、2 和 3 的正確總和。字符串 s 的長度最多為 1000 個字符。 | 打印 Jasmine 可以計算的新算式。 |
3+2+1 | 1+2+3 |
2 | 2 |
解題思路
使用字串來收算式,並且將數字獨立出來存到陣列中。如果陣列的資料只有一個的話就只輸出這個數字,否則就將陣列排序過後輸出,中間要有「+」。
範例程式碼-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