洛谷P1012

题目描述

设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整77,13,4,246联接成的最大整数为:7424613

输入输出格式

输入格式 :

第一行,一个正整数n。
第二行,n个正整数。

输出格式:

一个正整数,表示最大的整数

输入输出样例

输入
3
13 312 343
输出
34331213

题解

本题涉及到数字的拼接,显然是考字符串的使用
代码如下

#include<bits/stdc++.h>           //万能头文件
using namespace std;
string a[21];

//比较函数
bool cmp(string a , string b)
{
return a + b > b +a ; // a + b 就是a接在b的后面
}

int main()
{
int n = 0 ;
cin >> n ;
for(int i = 1 ; i <= n ; i++) cin >> a[i];
//C++的sort函数
sort(a+1,a+n+1,cmp);
for(int i = 1 ; i <= n ; i++) cout << a[i];
return 0;
}

代码解析之万能头文件
#include<bits/stdc++.h>
代码解析之C++Sort函数

sort函数有三个参数(第三个参数定义排序规则,可有可无).

  1. 第一个参数为排序的起始位置
  2. 第二个参数为排序的终止位置
  3. 第三个参数默认不写为升序排序,若自定义,则需要构造排序规则函数,且第三个参数直接收bool类型
代码解析之C++string类
  1. string是指字符串数组,相当于char[num];
  2. String有如下赋值方法

    • string  str1 = "first";    //拷贝初始化
    • string  str2("hello");     //直接初始化
    • 直接初始化:
      使用普通的函数匹配即可完成初始化。也就是说只是直接调用类的构造函数或拷贝构造函数就能完成初始化的就是直接初始化;

    • 拷贝初始化:
      将对象拷贝到正在创建的对象当中,如果需要还要进行类型转换。这里也就是间接调用拷贝构造函数,当然大部分情况调用拷贝构造函数,有时也可能调用移动构造函数。
  3. 常用函数

    string m ; 
    string s ;
    m.begin(); //字符数组的起始地址
    m.end(); //字符数组的终止地址
    m.append(s) //字符串拼接
  4. string 拼接的几种方法

    • 1、str += “a”, str =str+ “a” 效率差距
      str =str+ “a”加的运算产生的是一个新的对象,再把结果返回;而str += “a” 涉及到的应该是对象的引用,操作之后直接返回引用,避免了产生新的对象。
    • 使用append();

       void main(void)
      {
      string s1("hello");
      string s2("word");
      s1.append(s2);
      cout << s1 ;
      }
      //输出结果
      hello word
    • 直接拼接

      string s1 ;
      string s2 ;
      s2 = s2 + s1 ; //s1拼接在s2后面
  5. 字符串比较规则
    比较的时候,从字符串左边开始,一次比较每个字符,直接出现差异、或者其中一个串结束为止.
    比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于第二个字符是后面一个串大,所以不再继续比较,结果就是后面个串大.
    应用以上原理,用字符串解决洛谷p1012再方便不过了

谢谢访问