设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
输入:第一行,一个正整数n。第二行,n个正整数。
输出:一个正整数,表示最大的整数
样例输入
3
13 312 343
【样例输出】
34331213
我的思路是用string来做然后做个循环判断
该回答引用chatgpt
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(string a, string b) {
return a + b > b + a;
}
int main() {
int n;
cin >> n;
string num[25];
for (int i = 0; i < n; i++) {
cin >> num[i];
}
sort(num, num + n, cmp);
for (int i = 0; i < n; i++) {
cout << num[i];
}
cout << endl;
return 0;
}
#include<iostream>
#include<string>
using namespace std;
bool compare(string a,string b)
{
if(a+b>=b+a)//ab>=ba,这个时候不需要交换
{
return false;
}
return true;//ab<ba,这个时候需要交换
}
int main()
{
int n;
cin>>n;
string arr[20],temp;
for(int a=0;a<n;a++)
{
cin>>arr[a];
}
for(int i=0;i<n-1;i++)
{
for(int j=n-1;j>i;j--)
{
if(compare(arr[j-1],arr[j])) //如果为true则交换,
{
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
for(int k=0;k<n;k++){
cout<<arr[k];
}
cout<<endl;
return 0;
}
代码如下:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(string a, string b) {
return a + b > b + a;
}
int main() {
int n;
cin >> n;
string a[100];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n, cmp);
for (int i = 0; i < n; i++) {
cout << a[i];
}
return 0;
}
根据你的问题描述,需要输入整数n 然后输入n个整数,在拼接成一个最大的数,实现时可以按你的思路用字符串来判断,而且应该用字符串来判断,比如,123和3 就应该3在前面123在后面,这里就可以用字符串取数字的第一个数字,大的放在前面,小的放后面。所以你可以写一个方法,可以直接找一个冒泡排序或者什么排序的代码来修改,把判断大小那里修改为比较字符串第一个数字就行,对所有数字排完序后,循环拼接就行了。望采纳
供参考:
#include <stdio.h>
#include <string.h>
int main()
{
char t[30],s[21][30];
int i,j,n;
scanf("%d",&n);
for (i = 0;i < n;i++)
scanf("%s", s[i]);
for(i = n-1;i > 0; i--)
{
for(j = 0;j < i; j++)
{
if(strcmp(s[j],s[j+1]) < 0){
strcpy(t,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],t);
}
}
}
for (i = 0;i < n;i++)
printf("%s",s[i]);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: