首页 > 其他分享 >第十一届蓝桥杯试题E:排序

第十一届蓝桥杯试题E:排序

时间:2024-03-02 14:22:22浏览次数:17  
标签:arr 第十一届 试题 交换 蓝桥 num print 100 排序

目录

题目

  • 对一个字符串,对它进行冒泡排序使其为升序,例如:对于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

标签:arr,第十一届,试题,交换,蓝桥,num,print,100,排序
From: https://www.cnblogs.com/lushuang55/p/18048596

相关文章

  • P8680 [蓝桥杯 2019 省 B] 特别数的和
    暴力秒了#include<bits/stdc++.h>#defineintlonglong//开longlong是个好习惯usingnamespacestd;boolbaozi(intx){while(x){intt=x%10;if(t==2||t==0||t==1||t==9)//数位判断{returntrue;......
  • 蓝桥杯2022年第十三届省赛真题-技能升级(中)
    目录题目题解:暴力题解:优化题目题解:暴力思路:枚举每一个Ai,并一直减去Bi,直到小于零为止,即为该技能所能增加的点数的集合。将每一个选择存进res中,并排序选择前M大的技能点即可。#首先,a-b加入列表,循环a/b次;其次,对列表排序,取前M个数进行求和a,b=map(int,input().split())#读入......
  • 2024 蓝桥杯模拟赛3(div1+div2)
    2024蓝桥杯模拟赛3(div1+div2)P8834[传智杯#3决赛]序列简单的模拟,数据范围很小,暴力即可点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e5+5;voidsolve(){ lln,k,a[N],cnt=0; cin>>n>>k; for(inti=1;i<=n;i++)c......
  • JS面试题
    1.判断一个函数是否标记为asyncfunctionisAsyncFunction(func){conststr=Object.prototype.toString.call(func);returnstr=='[objectAsyncFunction]';}2.两个大整数之和/***1.将两个数字对齐*2.从后往前循环,按位相加同时加上进位*3.计算进位*4.到最......
  • P8647 [蓝桥杯 2017 省 AB] 分巧克力
    题目链接:小巧克力的边长一定在\(1\sim10^5\)之间。答案为在\(1\sim10^5\)之间找一个最大的数,使得所有\(h[i]/a*w[i]/a\)的和\(\geqslantk\)即可。#include<cstdio>#include<algorithm>constintN=1e5+10;intn,k,h[N],w[N];boolcheck(inta)......
  • 面试必备!《1000多道互联网Java工程师面试题》分享
    资料领取见文末!在当今互联网时代,Java作为一种广泛应用的编程语言,在互联网行业中扮演着至关重要的角色。无论是初学者还是有经验的开发者,不断学习和提升自己的Java技能都是至关重要的。而《1000多道互联网Java工程师面试题》这份资料提供了一个绝佳的机会,让你深入了解并加强对Java......
  • 数据类型拓展与面试题解读
    整数拓展进制:在平时咱们生活中经常见到的例如通用于电脑识别的二进制、咱们生活中常用的十进制、工作中常见的八进制与十六进制。二进制:通常会以0b开头十进制:咱们生活中的数字八进制:通常以0开头十六进制:通常以0x开头​ 浮点数拓展(float、double)试题举例银行......
  • (蓝桥)递归与递推
    1、对于 scanf printf和cincout按照10^5来划分使用 递归实现指数型枚举 https://www.acwing.com/problem/content/94/ #include<iostream>#include<cstring>#include<cstdio>#include<algorithm>usingnamespacestd;constintN=17;intn;inta[N];......
  • 第十四届蓝桥杯个人题解
    a幸运的数主要是思路 遍历1-100000000每一层循环,首先将其每一位分到数组里,并记录位数,如果是偶数位再接着往下,比较前半和后半是否相等:通过加减最后结果是否为零来判断intmain(){  intnum=0;  for(inti=1;i<100000000;i++)  {    ints[9]={0};......
  • 面试题 02.07. 链表相交C
    利用链表的特性,如果相交的话,后面就不可能岔开!你可以想象把他们有同一个尾巴,然后从尾巴往前看。所以只要知道两个链表的长度,就可以在同一起跑线上一起比较了。/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;......