OJ数串 *c++ python*

  • 题目描述
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613
  • 输入描述
有多组测试样例,每组测试样例包含两行,第一行为一个整数NN<=100),
第二行包含N个数(每个数不超过1000,空格分开)。
  • 输出描述
每组数据输出一个表示最大的整数。
  • 输入
2
12 123
4
7 13 4 246
  • 输出
12312
7424613
  • python通过代码
    定义自己的比较函数 ,然后调用functools来将自己的比较函数使用到sort函数内
import functools
n = int(input())
a = input().split()
def mycmp(x,y):
    if x + y > y + x: return 1
    elif x + y == y + x: return 0
    else: return -1
a.sort(key = functools.cmp_to_key(mycmp), reverse = True)
print("".join(a)) 
  • 描述
实际上就是对字符串排序,从高到低输出字符串
采用字符串连接会很方便
自己定义比较函数需要使用functools.cmp_to_key
  • c++通过代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stdio.h>

using namespace std;

bool compare(string s1, string s2)
{
    return (s1 + s2) > (s2 + s1);
}

int main()
{
    int n;
    cin >> n;
    vector<string> sArray;
    for(int i = 0;i < n;i ++){
        string temp;
        cin >> temp;
        sArray.push_back(temp);
    }

    sort(sArray.begin(), sArray.end(), [](string s1, string s2){
         return (s1 + s2) > (s2 + s1);
    });
    //sort(sArray.begin(), sArray.end(), compare);
    for(string s:sArray){
        cout << s;
    }
    return 0;
}
  • 描述
可以直接用c++的匿名函数lambda函数[]来编写compare,与直接调用compare是一样的

匿名函数的例子

[](int x, int y) { return x + y; } // 隐式返回类型
[](int& x) { ++x; }   // 没有return语句 -> lambda 函数的返回类型是'void'
[]() { ++global_x; }  // 没有参数,仅访问某个全局变量
[]{ ++global_x; }     // 与上一个相同,省略了()

可以指定返回的类型

[](int x, int y) -> int { int z = x + y; return z; }

Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.下面这些例子就是:

[]        //未定义变量.试图在Lambda内使用任何外部变量都是错误的.
[x, &y]   //x 按值捕获, y 按引用捕获.
[&]       //用到的任何外部变量都隐式按引用捕获
[=]       //用到的任何外部变量都隐式按值捕获
[&, x]    //x显式地按值捕获. 其它变量按引用捕获
[=, &z]   //z按引用捕获. 其它变量按值捕获

猜你喜欢

转载自blog.csdn.net/weixin_36372879/article/details/80642414
今日推荐