第十一届蓝桥杯试题E:排序
题目
- 对一个字符串,对它进行冒泡排序使其为升序,例如:对于lan,排序成 aln 需要交换一次(只能交换相邻的两个字母),对于qiao,排序成 aioq 就需要交换4次。请找出冒泡排序时恰好需要交换100次的字符串,如果有多个字符串满足条件,则找出最短的那个,如果有多个满足条件而且还是最短的,则找出字典序最小的那个。
分析
-
举几个例子看看情况,cba可以发现c需要移动两次回到他的位置,b在a前也需要一次交换,共三次;dcba=3+2+1=6,edcba=4+3+2+1=10,我们可以从1开始按顺序累加,看看=100需要累加到多少,写一个简单的for循环测试如下。我们发现最接近100的是105,这时是从1累加到14,由此我们可以得到一个15长序列onmlkjihgfedcba,我们只需要在这个序列上通过调整减少5次就是最终答案。
-
比如edcba中e交换的次数等于后面有几个比他大的数,4个,假设我们要求的是edcba只交换8次的排列,原来总和=10,现在总和=8,我们让第三个数C提到最前面就可以实现cedba,交换次数=2+3+2+1=8,找到这个规律后就可以得出我们的最终答案105-5就是把onmlkjihgfedcba中第6个数j移到最前面,所以最终答案是:jonmlkihgfedcba
a=0
for i in range(1,15):
a+=i
print(i)
print(a)#105
验证代码
- 可以通过以下代码验证
def bubble_sort(arr):
num = 0
for i in range(len(arr)-1,0,-1):
for j in range(i):
if arr[j] > arr[j+1]:
num += 1
arr[j],arr[j+1] = arr[j+1],arr[j]
return num
print(bubble_sort(list('jonmlkihgfedcba')))#100
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人