蓝桥杯-拼数-python

拼数

题目描述

设有 n个正整数 a1,a2,a3…a10,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

输入描述

第一行有一个整数,表示数字个数 n。

第二行有 n 个整数,表示给出的 nn 个整数 ai 。

其中, 1<= n <= 20,1 <= a_i <= 10^9

输出描述

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

输入输出样例

输入

3
13 312 343

输出

34331213

做题过程:

python-暴力

一开始无脑暴力得到所有排列比较大小,时间较长:

from itertools import *
n=int(input())
num=list(map(str,input().split(' ')))
max=0
for term in permutations(num):
    a=''.join(term)
    re=eval(a)
    if re>max:
        max=re
print(max)

python-先排列

(自己改的,不知道有没有改进,望各位大佬指正)

后来看到提示,可以先比大小排列然后拼接

def compare(a,b):
    return a+b > b+a
n=int(input())
num=list(map(str,input().split()))
for i in range(n-1):                   #冒泡排序原理
    for j in range(i+1,n):
        if not compare(num[i],num[j]): #比较拼接后的大小
            num[i],num[j]=num[j],num[i]
for x in num:
    print(x,end='')

C++按字典序大小排序

又了解到别人C++做法,按字典序大小排序:

C#include<bits/stdc++.h>
using namespace std;
string a[21]; 
bool cmp (string a, string b){   //从大到小字典序排序
    return a + b > b + a;        
}
int main( ){
    int n;    cin >> n;
    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;
}

Java

类似上面的

再用Java尝试写:

比较时用compareTo()代替上面类似的cmp():

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner q = new Scanner(System.in);
        int n = q.nextInt();
        int[] nums = new int[n];
        for(int i = 0; i < n; i++)
            nums[i] = q.nextInt();
        String[] s = new String[n];
        String ans = "";
        for(int i = 0; i < n; i++)
            s[i] = nums[i] + "";
        for(int i = 0; i < n - 1; i++)  //比较
            for(int j = i + 1; j < n; j++) 
                if((s[j] + s[i]).compareTo(s[i] + s[j]) < 0) {
                    String temp = s[j];
                    s[j] = s[i];
                    s[i] = temp;
                }
        for(int i = n - 1; i >= 0; i--) 
            ans += s[i];
        System.out.println(ans);
    }
}

在写python时,遇到了忘记了的字典排序语法:

sorted并不改变字典本身的数据次序。

输出后为列表和元组

可以

 A = sorted(dic.items(),key = lambda dic:dic[0],reverse= False)
 #dic[0]:按key的大小排列,reverse=False:升序排列

赋值给A ,A的次序是变化后的

python的数据类型真好用哈哈哈

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值