题目描述
输入一组正整数,整数之间以空格隔开,请将输入的这组正整数重新组合使得组合得到的正整数最大,并以字符串的形式输出。
Example:
Input:11 23 34
output: 342311
解题思路
将输入的每个整数以字符串的形式存储,并通过排序算法得到最大的输出(字符串从大到小排序)。比如字符串A和B比较大小,将A和B拼接为新的字符串,若(A+B)>(B+A),则将字符串A放在前面,字符串B放在后面,排序完成以后,按序输出就可以了。
C++代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
const char PATTERN = ' ';
string str = "";
string strTmp = "";
vector<string> strVec;
//get input.
cout<<"Enter numbers, separated by spaces:"<<endl;
getline(cin, str);
//segmentation.
for(unsigned int i=0; i<str.size(); i++)
{
if(str[i] != PATTERN)
{
strTmp.append(1, str[i]);
}
else if(strTmp.size() != 0)
{
strVec.push_back(strTmp);
strTmp.clear();
}
//the last character.
if((i == str.size()-1) && (strTmp.size() != 0))
{
strVec.push_back(strTmp);
strTmp.clear();
}
}
//sorting. from max to min.
for(unsigned int i=0; i<strVec.size()-1; i++)
{
for(unsigned int j=i+1; j<strVec.size(); j++)
{
if((strVec[i] + strVec[j]) < (strVec[j] + strVec[i]))
{
strTmp = strVec[i];
strVec[i] = strVec[j];
strVec[j] = strTmp;
}
}
}
//output.
cout<<"Sorting:"<<endl;
for(unsigned int i=0; i<strVec.size(); i++)
{
cout<<strVec[i]<<endl;
}
cout<<"Maximum:"<<endl;
for(unsigned int i=0; i<strVec.size(); i++)
{
cout<<strVec[i];
}
cout<<endl;
return 1;
}
本文介绍了一种算法,用于将一组正整数重新组合成最大的可能数值。通过将整数转换为字符串并使用一种特殊的排序方法,可以确保组合出的数字是所有可能组合中最大的。此算法适用于需要对数字进行特定排序的场景。
634

被折叠的 条评论
为什么被折叠?



