2. 组成最大数

220 阅读1分钟

题目

小组中每位都有一张卡片,卡片上是6位以内的正整数。将卡片连起来可以组成多种数字,计算组成的最大数字。

输入描述

,号分割的多个正整数字符串,不需要考虑非数字字符情况,小组最多25个人。

输出描述

最大的数字字符串

示例

image.png

思路:

  • 字符串比较:首先,我们要确定如何将数字拼接在一起才能得到最大的数字。对于两个数字 ab,我们可以比较 a + bb + 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;
}