蓝桥杯倒计时 | 倒计时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]

相关内容

热门资讯

电视安卓系统哪个品牌好,哪家品... 你有没有想过,家里的电视是不是该升级换代了呢?现在市面上电视品牌琳琅满目,各种操作系统也是让人眼花缭...
安卓会员管理系统怎么用,提升服... 你有没有想过,手机里那些你爱不释手的APP,背后其实有个强大的会员管理系统在默默支持呢?没错,就是那...
安卓系统软件使用技巧,解锁软件... 你有没有发现,用安卓手机的时候,总有一些小技巧能让你玩得更溜?别小看了这些小细节,它们可是能让你的手...
安卓系统提示音替换 你知道吗?手机里那个时不时响起的提示音,有时候真的能让人心情大好,有时候又让人抓狂不已。今天,就让我...
安卓开机不了系统更新 手机突然开不了机,系统更新还卡在那里,这可真是让人头疼的问题啊!你是不是也遇到了这种情况?别急,今天...
安卓系统中微信视频,安卓系统下... 你有没有发现,现在用手机聊天,视频通话简直成了标配!尤其是咱们安卓系统的小伙伴们,微信视频功能更是用...
安卓系统是服务器,服务器端的智... 你知道吗?在科技的世界里,安卓系统可是个超级明星呢!它不仅仅是个手机操作系统,竟然还能成为服务器的得...
pc电脑安卓系统下载软件,轻松... 你有没有想过,你的PC电脑上安装了安卓系统,是不是瞬间觉得世界都大不一样了呢?没错,就是那种“一机在...
电影院购票系统安卓,便捷观影新... 你有没有想过,在繁忙的生活中,一部好电影就像是一剂强心针,能瞬间让你放松心情?而我今天要和你分享的,...
安卓系统可以写程序? 你有没有想过,安卓系统竟然也能写程序呢?没错,你没听错!这个我们日常使用的智能手机操作系统,竟然有着...
安卓系统架构书籍推荐,权威书籍... 你有没有想过,想要深入了解安卓系统架构,却不知道从何下手?别急,今天我就要给你推荐几本超级实用的书籍...
安卓系统看到的炸弹,技术解析与... 安卓系统看到的炸弹——揭秘手机中的隐形威胁在数字化时代,智能手机已经成为我们生活中不可或缺的一部分。...
鸿蒙系统有安卓文件,畅享多平台... 你知道吗?最近在科技圈里,有个大新闻可是闹得沸沸扬扬的,那就是鸿蒙系统竟然有了安卓文件!是不是觉得有...
宝马安卓车机系统切换,驾驭未来... 你有没有发现,现在的汽车越来越智能了?尤其是那些豪华品牌,比如宝马,它们的内饰里那个大屏幕,简直就像...
p30退回安卓系统 你有没有听说最近P30的用户们都在忙活一件大事?没错,就是他们的手机要退回安卓系统啦!这可不是一个简...
oppoa57安卓原生系统,原... 你有没有发现,最近OPPO A57这款手机在安卓原生系统上的表现真是让人眼前一亮呢?今天,就让我带你...
安卓系统输入法联想,安卓系统输... 你有没有发现,手机上的输入法真的是个神奇的小助手呢?尤其是安卓系统的输入法,简直就是智能生活的点睛之...
怎么进入安卓刷机系统,安卓刷机... 亲爱的手机控们,你是否曾对安卓手机的刷机系统充满好奇?想要解锁手机潜能,体验全新的系统魅力?别急,今...
安卓系统程序有病毒 你知道吗?在这个数字化时代,手机已经成了我们生活中不可或缺的好伙伴。但是,你知道吗?即使是安卓系统,...
奥迪中控安卓系统下载,畅享智能... 你有没有发现,现在汽车的中控系统越来越智能了?尤其是奥迪这种豪华品牌,他们的中控系统简直就是科技与艺...