洛谷 P1012 [NOIP 1998 提高组] 拼数 python

方法一:列出全排列 (只能通过一部分,数据大了会超时,超内存)

Python标准库中的itertools模块提供了两个函数用于计算排列和组合:

  • permutations(iterable, r=None):从序列iterable中取出r个元素的所有排列,返回一个迭代器对象。

  • combinations(iterable, r):从序列iterable中取出r个元素的所有组合,返回一个迭代器对象。

import itertools
n = int(input())
a = list(map(int,input().split()))
all = list(itertools.permutations(a))
num =[]
for i in range(len(all)):
    num.append(int("".join(map(str,all[i]))))
print(max(num))

方法一(改1)

import itertools
n = int(input())
a = list(map(int,input().split()))
max_num = 0
for i in itertools.permutations(a):
    num = int("".join(map(str,i)))
    max_num = max(num,max_num)
print(max_num)

 方法一(改2)

import itertools
n = int(input())
a = list(input().split())
print(max(["".join(i) for i in itertools.permutations(a)]))

方法二:75%通过,无法对321 32这种情况进行处理

n = int(input())
a = list(input().split())
for i in range(n):
    for j in range(n-i-1):
        num = min(len(a[j]),len(a[j+1]))
        if int(a[j][0:num]) < int(a[j+1][0:num]):
            a[j+1],a[j] = a[j],a[j+1]
print("".join(a))

方法二(改)ac,由对单个数据进行比较改为对组合进行比较

n = int(input())
a = list(input().split())
for i in range(n):
    for j in range(n-i-1):
        if int(a[j]+a[j+1]) < int(a[j+1]+a[j]):
            a[j+1],a[j] = a[j],a[j+1]
print("".join(a))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值