C++/PTA 组最大数

简介: 设有n个正整数,将他们连接成一排,组成一个最大的多位整数。如:n=3时,3个整数13,312,343连成的最大整数为34331213。

题目要求

设有n个正整数,将他们连接成一排,组成一个最大的多位整数。


如:n=3时,3个整数13,312,343连成的最大整数为34331213。


如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。

输入格式:


有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。

输出格式:


每组数据输出一个表示最大的整数。


输入样例:

2

12 123

4

7 13 4 246


输出样例:

12312

7424613


解题思路

将输入的数字转换成字符串

按照自定义的排序规则(即两个字符串拼接成的数之间的大小关系)进行排序

将排好序的字符串依次拼接起来就可以得到最大的多位整数。具体实现中使用了 STL 中的 vector 容器和 sort 函数。

代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
vector<string> v;
bool cmp1(string a, string b) {
  string tmp1 = a + b;
  string tmp2 = b + a;
  return tmp1 > tmp2;
}
int main(){
    int ans;
    while(scanf("%d",&ans)==1){
        v.clear();
        for(int i=0;i<ans;i++){
            string temp;
            cin>>temp;
            v.push_back(temp);  
        }
        sort(v.begin(),v.end(),cmp1);
        for(auto it=v.begin();it!=v.end();it++){
            cout<<*it;
        }
        cout<<endl;
    }
}



在程序的主循环中,先使用 vector 容器存储输入的字符串

然后将容器中的元素按照 cmp1 函数定义的顺序进行排序

最后再按顺序将所有排序后的字符串拼接起来即可得到答案,并在每次输出结束后换行

头文件

algorithm 头文件提供了一系列常用的算法函数,如排序、查找、计数等。在这个程序中,使用了 sort 函数。


vector 容器用于存储字符串。vector 是一个动态数组,可以随时动态增加或缩减容量。

在这个程序中,使用 vector 存储输入的字符串,并在最后将排序好的字符串依次输出。


string.h 头文件提供了字符串操作的各种函数,如 strlen、 strcpy、 strcat 等。

在这个程序中,使用了 C++ 的字符串类,它封装了各种字符串操作和提供了更多的方法和功能。


vector函数

vector 是 C++ 标准库中的一个容器,可以看作是一个动态数组,能够存储不同类型的数据。以下是 vector 的常用函数语法:


vector<T> v;:定义一个空的 vector,其中 T 是 vector 中存储元素的类型。


vector<T> v(n);:定义一个长度为 n 的 vector,其中所有元素都初始化为默认值。


vector<T> v(n, val);:定义一个长度为 n 的 vector,其中所有元素都初始化为 val。


vector<T> v1(v2);:使用 vector v2 初始化一个新的 vector v1。


v.empty():返回 true 如果 vector 为空。


v.size():返回 vector 中元素的个数。


v.clear():删除 vector 中的所有元素。


v.push_back(val):在 vector 的末尾添加一个元素 val。


v.pop_back():删除 vector 的最后一个元素。


v.front():访问 vector 的第一个元素。


v.back():访问 vector 的最后一个元素。


v.begin() 和 v.end():返回指向 vector 第一个和最后一个元素的迭代器。


v.insert(pos, val):在 pos 位置前插入元素 val。


v.erase(pos):删除 pos 指向的元素。


v.erase(start_pos, end_pos):删除从 start_pos 到 end_pos 之间的元素。


v.resize(n):将 vector 的长度调整为 n。


v.reserve(n):预留至少能容纳 n 个元素的存储空间。


这里只列出了一部分常用函数,更多详细信息可以查看 C++ 标准库的文档。


总结

本文基于vector函数进行解题,读者可自行实践。

我是秋说,我们下次见。

目录
相关文章
|
3月前
|
C++
【PTA】L1-016 验证身份(C++)
【PTA】L1-016 验证身份(C++)
40 0
【PTA】L1-016 验证身份(C++)
|
3月前
|
C++
【PTA】L1-033 出生年(C++)
【PTA】L1-033 出生年(C++)
61 0
【PTA】L1-033 出生年(C++)
|
3月前
|
C++
【PTA】L1-011 A-B (C++)
【PTA】L1-011 A-B (C++)
60 0
【PTA】L1-011 A-B (C++)
|
3月前
|
C++
【PTA】​L1-005 考试座位号​ (C++)
【PTA】​L1-005 考试座位号​ (C++)
69 0
【PTA】​L1-005 考试座位号​ (C++)
|
3月前
|
测试技术 C++
【PTA】​L1-003 个位数统计​ (C++)
【PTA】​L1-003 个位数统计​ (C++)
45 0
【PTA】​L1-003 个位数统计​ (C++)
|
3月前
|
C++
【PTA】L1-020 帅到没朋友 (C++)
【PTA】L1-020 帅到没朋友 (C++)
57 0
【PTA】L1-020 帅到没朋友 (C++)
|
3月前
|
C++
【PTA】​ L1-080 乘法口诀数列​(C++)
【PTA】​ L1-080 乘法口诀数列​(C++)
49 0
【PTA】​ L1-080 乘法口诀数列​(C++)
|
3月前
|
C++
【PTA】​L1-078 吉老师的回归​(C++)
【PTA】​L1-078 吉老师的回归​(C++)
67 0
【PTA】​L1-078 吉老师的回归​(C++)
|
3月前
|
C++
【PTA】​L1-079 天梯赛的善良​ (C++)
【PTA】​L1-079 天梯赛的善良​ (C++)
67 0
【PTA】​L1-079 天梯赛的善良​ (C++)
|
3月前
|
C++
【PTA】​ L1-077 大笨钟的心情​(C++)
【PTA】​ L1-077 大笨钟的心情​(C++)
75 0
【PTA】​ L1-077 大笨钟的心情​(C++)