蓝桥杯倒计时 | 倒计时18天
创始人
2025-05-31 19:14:03
0

作者🕵️‍♂️:让机器理解语言か

专栏🎇:蓝桥杯倒计时冲刺

描述🎨:蓝桥杯冲刺阶段,一定要沉住气,一步一个脚印,胜利就在前方!

寄语💓:🐾没有白走的路,每一步都算数!🐾

题目一:暑假作业 

2016年第七届省赛,lanqiao0J题号1388 

【题目描述】加减乘除四种运算:

每个方块代表1~13中的某一个数字,但不能重复。

比如:

 6  + 7 = 139  - 8 = 13  * 4 = 1210 / 2 = 5

以及:

 7  + 6 = 139  - 8 = 13  * 4 = 1210 / 2 = 5

就算两种解法。(加法,乘法交换律后算不同的方案

一共有多少种方案?

解法一:简单做法(超时)

用第二期排列组合的permutations( )函数,从13个数中挑12个数出来,生成所有的排列(缺点:不能提前终止,导致时间太长),检查是否合法。
运行时间极长: 13个数的排列: 13!= 6,227,020,800,可能需要半小时。

解法二: DFS自写全排列

排列问题可以用DFS来写,不需要生成一个完整排列。

例如:一个排列的前3个数,如果不满足“□+□=□”,那么后面的9个数不管怎么排列都不对。

 这种提前终止搜索的技术叫“剪枝”。

排列的前三个数做加法,4~6个数做减法,7~9个数做乘法,10~12个数做除法 

def dfs(num):global ansif num==13:       # 四个式子都排列好了                       # 下面除法改写成乘法,因为除法包括精度问题(小数部分)if b[10]== b[11]*b[12]:ans+=1    # 最后一个要求也满足,ans+=1,结束return# 剪枝操作:提前终止if num==4 and b[1]+b[2] != b[3]: return   #剪枝if num==7 and b[4]-b[5] != b[6]: return   #剪枝if num==10 and b[7]*b[8] != b[9]: return  #剪枝#  输出1到13全排列(套模板)for i in range(1,14):if not vis[i]:b[num]=i        # # 存排列(这里不用a[i],因为是1到n的数)vis[i]=1dfs(num+1)vis[i]=0
ans=0
b =[0]*15               # 记录生成的一个全排列
vis=[0]*15
dfs(1)
print(ans)  # 64

题目二:拼数

        【简单粗暴法】:先得到这n个整数的所有排列,然后找其中最大的。但是这个方法的复杂度是O(n!),当n=20时,有20!= 2X10^{18}种排列,超时。。。 

from itertools import *
N = int(input())                        # 其实没用到
ans = ''
nums =list( map(str,input().split()))   # 按字符的形式读入
for element in permutations(nums):      # 每次输出一个全排列a="".join(element)                  # 把这个全排列的所有元素拼起来,得到一个串if ans < a:                         # 在所有串中找最大的ans = a                         # 如果有比ans更大的,将这个数赋值给ans
print(ans)

注意:"".join(element)只能将element中的字符串拼接起来,不能对int型数字进行拼接 

        【推荐做法】:暴力排列不行,可以用排序吗?本题不能直接对数字排序然后首尾相接,例如“7,13”,应该输出“713”而不是“137”。注意到这其实是按两个数字组合的字典序(先比较第一位数,再逐一比较后面的数)排序,也就是把数字看成字符串来排序。在比较第一位时,如果后面的数num[j]大于前面的num[i],则进行交换,确保num是按从大到小(大的数在前面,拼出来的数最大)的顺序。本题的n很小,用较差的排序算法也行,例如交换排序。第3-6行用交换排序对所有的数(按字符串处理) 进行排序,复杂度O(n^{2})。 

n = int(input())
nums = input().split()                         # 按字符读入
# 交换排序(j在i后面)
for i in range(0,n-1):                                         for j in range(i+1,n):if nums[j]+nums[i]>nums[i]+nums[j]:    #字符串合并然后比较nums[j],nums[i] = nums[i],nums[j]  #交换两个数(其实是字符串)的位置
print("".join(nums))

注意:字符串‘数字’比较大小比较的是字典序大小!

题目三:奖学金

法一:简洁写法

n = int(input())
scores = []
for i in range(n):score = list(map(int,input().split())) # 读语、数、外scores.append([i+1,sum(score)]+score)  # 学号、总分、语、数、外index = reversed((1,2)) # reversed:反转。按总分、语文、学号排序.
# 学号默认从1开始,满足题目要求的从小到大的排序,所以只需要排序总分和语文即可
# 先排学号,再排总分,最后排序总分,因为总分优先级最高
for i in index:  # 排序scores.sort(key=lambda x:x[i],reverse=True) # 按x[i]降序# scores = sorted(scores,key=lambda x:x[i],reverse=True)
for i in range(5):print(scores[i][0],scores[i][1])

法二:自写比较函数cmp( )

import functools
def cmp(n1,n2):                         # 1表示降序,-1表示升序if n1[1]!=n2[1]:                    # 总分不一样的,高分在前return -1 if n1[1]>n2[1] else 1elif n1[2] != n2[2]:                # 总分一样,语文不一样的,语文高在前return -1 if n1[2]>n2[2] else 1else:                               # 成绩,语文都一样的,学号小的在前return 1 if n1[0]>n2[0] else -1
n = int(input())
scores = []
for i in range(n):score = list(map(int,input().split()))scores.append([i+1,sum(score)]+score)
# scores.sort(key=functools.cmp_to_key(cmp))  #  用sort
scores = sorted(scores,key=functools.cmp_to_key(cmp)) # 用sorted
for i in range(5):print(scores[i][0],scores[i][1])

functools.cmp_to_key的功能就是定义排序时的规则,使数组按照自己定义的规则进行排序。 

部分排序

sort()不能在一部分上做排序,只能整体排序。只能先拷贝出要排序的部分,排序后再拷贝回去;

sorted()可以部分排序,但不能在源数据上排序,只能返回排序后的片段,同样也需要拷贝。

s1 = [2,6,33,654,34,987,765]
s2 = sorted(s1[2:5])
print(s1) # [2, 6, 33, 654, 34, 987, 765]
print(s2) # [33, 34, 654]

相关内容

热门资讯

iPhone手机怎么玩安卓系统... 你有没有想过,你的iPhone手机竟然也能玩安卓系统?没错,就是那个一直以来让你觉得遥不可及的安卓世...
平板删安卓系统更新不了,原因及... 最近是不是你也遇到了这样的烦恼?平板电脑上的安卓系统更新不了,是不是让你头疼得要命?别急,今天就来给...
苹果组装机安卓系统卡,卡顿背后... 你有没有发现,最近用苹果手机的时候,有时候系统有点卡呢?这可真是让人头疼啊!你知道吗,其实这背后还有...
安卓系统原生浏览器,功能与体验... 你有没有发现,每次打开手机,那个小小的浏览器窗口总是默默无闻地在那里,陪你浏览网页、搜索信息、看视频...
安卓机如何上苹果系统,跨平台体... 你是不是也和我一样,对安卓机和苹果系统之间的切换充满了好奇?想象你的安卓手机里装满了各种应用,而苹果...
安卓导入系统证书失败,原因分析... 最近在使用安卓手机的时候,你是不是也遇到了一个让人头疼的问题——导入系统证书失败?别急,今天就来给你...
安卓原生系统有哪些手机,盘点搭... 你有没有想过,为什么有些手机用起来就是那么流畅,那么顺心呢?这背后可大有学问哦!今天,就让我带你一起...
安卓系统关机了怎么定位,安卓系... 手机突然关机了,是不是有点慌张呢?别担心,今天就来教你一招,让你的安卓手机即使关机了,也能轻松定位到...
安卓系统游戏加速器,畅享无延迟... 你有没有发现,手机游戏越来越好玩了?不过,有时候游戏体验可能并不那么顺畅,是不是因为手机性能不够强大...
安卓4系统天气功能,尽在掌握 安卓4系统天气功能大揭秘在当今这个数字化的世界里,手机已经不仅仅是一个通信工具,它更是一个集成了各种...
安卓系统如何玩碧蓝幻想,攻略与... 你有没有想过,在安卓系统上玩《碧蓝幻想》竟然可以这么酷炫?没错,就是那个让你沉迷其中的二次元大作!今...
安卓系统搜不到图朵,图朵生成之... 最近是不是你也遇到了这样的烦恼?手机里明明有那么多美美的图片,但是用安卓系统搜索的时候,却怎么也找不...
魁族8刷安卓系统,系统升级后的... 哇,你知道吗?最近在安卓系统圈子里,有一个话题可是引起了不小的轰动,那就是魁族8刷安卓系统。你是不是...
微信正版安装安卓系统,畅享沟通... 你有没有想过,你的微信是不是正版安装的安卓系统呢?这可不是一个小问题哦,它关系到你的微信使用体验和隐...
电视能刷安卓系统吗,电视也能刷... 电视能刷安卓系统吗?揭秘智能电视的无限可能想象你家的电视不再只是用来观看节目的工具,而是变成了一个功...
安卓系统开通通知功能,畅享智能... 你知道吗?最近安卓系统更新后,新增了一个超级实用的功能——开通通知功能!这可是个大喜事,让咱们的生活...
苹果系统安卓爱思助手,系统兼容... 你有没有发现,手机的世界里,苹果系统和安卓系统就像是一对欢喜冤家,总是各有各的粉丝,各有各的拥趸。而...
安卓系统占用很大内存,揭秘内存... 手机里的安卓系统是不是让你感觉内存不够用,就像你的房间堆满了杂物,总是找不到地方放新东西?别急,今天...
安卓系统p30,安卓系统下的摄... 你有没有发现,最近安卓系统P30在手机圈里可是火得一塌糊涂呢!这不,我就来给你好好扒一扒这款手机的那...
siri被安卓系统进入了,智能... 你知道吗?最近科技圈可是炸开了锅,因为一个大家伙——Siri,竟然悄悄地溜进了安卓系统!这可不是什么...