题目
小组中每位都有一张卡片,卡片上是6位以内的正整数。将卡片连起来可以组成多种数字,计算组成的最大数字。
输入描述
,号分割的多个正整数字符串,不需要考虑非数字字符情况,小组最多25个人。
输出描述
最大的数字字符串
示例
思路:
-
字符串比较:首先,我们要确定如何将数字拼接在一起才能得到最大的数字。对于两个数字
a和b,我们可以比较a + b和b + a的结果。如果a + b大于b + a,那么a应该排在b前面,反之亦然。 -
排序:基于以上的比较规则,我们可以将输入的数字转换为字符串,然后按照上述规则对字符串数组进行排序。排序后的结果,拼接起来就是能形成的最大数字
-
写一个冒泡排序即可
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main()
{
string str;
cin >> str;
vector<string>vec;
stringstream ss(str);
string word;
while (getline(ss, word, ',')) {
std::cout << word << std::endl;
vec.push_back(word);
}
for (int i = 0; i < vec.size() - 1; i++) {
for (int j = 0; j < vec.size() - 1- i; j++) {
if (vec[j] + vec[j + 1] < vec[j + 1] + vec[j]) {
swap(vec[j], vec[j + 1]);
}
}
}
string res;
for (const string& s : vec) {
res += s;
}
std::cout << res << std::endl;
return 0;
}