首页 > 编程语言 >蓝桥杯备战日志(Python)19-阅兵方阵&删除字符-(平方和频次统计&字符串字典序)

蓝桥杯备战日志(Python)19-阅兵方阵&删除字符-(平方和频次统计&字符串字典序)

时间:2023-02-28 22:00:57浏览次数:61  
标签:fre Python 字母 蓝桥 19 num dict str input

阅兵方阵

原题

X 国要参加同盟阅兵活动。

主办方要求每个加盟国派出的士兵恰好能组成 2 个方阵。

X 国发现弱小的 Y 国派出了130 人的队伍,他们的士兵在行进中可以变换 2 种队形:

蓝桥杯备战日志(Python)19-阅兵方阵&删除字符-(平方和频次统计&字符串字典序)_字典序

蓝桥杯备战日志(Python)19-阅兵方阵&删除字符-(平方和频次统计&字符串字典序)_平方和_02

X 国君很受刺激,觉得 X 国面积是 Y 国的 6 倍,理应变出更多队形。 于是他发号施令: 我们要派出一支队伍,在行进中要变出 12种队形!!!

手下人可惨了,要忙着计算至少多少人才能组成 12 种不同的双方阵。 请你利用计算机的优势来计算一下,至少需要多少士兵。


分析

本题题意清楚,求平方和等于同一个数res的情况,这里已知有12种情况,求res这个数的最小值。解题思路是,求出1~n (这里取n=1000)内的平方,然后枚举不同的平方组合得到平方和,同时统计各平方和的值的频次,最后在出现频次等于12的平方和的数中选择最小的那个数即为所求。


源码

n = 1000
An = [i*i for i in range(1,n)]
num_fre_dict = dict()
for i in range(1,n-1):
for j in range(i,n-1):
nums = An[i] + An[j]
t = num_fre_dict.get(nums)
if t is None:
num_fre_dict[nums] = 1
else:
num_fre_dict[nums] = t + 1

res = min( num for num,fre in num_fre_dict.items() if fre == 12)
print(res)



删除字符

原题

蓝桥杯备战日志(Python)19-阅兵方阵&删除字符-(平方和频次统计&字符串字典序)_平方和_03


分析

本题转换一下角度就很容易求解,给定一个字母字符串,可求其长度为length,需要删除t个字母,即在字母字符串中按顺序选择 num (num=length - t) 个字母。解题的关键点在于字典序最小,首先要理解计算机中字母字符串的字典序的比较:逐一比较两个字符串str1何str2的第i个字符(i = 0, 1, 2, ..., n-1, n为最短字符串的长度),若str1[i] < str2[i],则字典序:str1 < str2。下图两个例子加深理解:

蓝桥杯备战日志(Python)19-阅兵方阵&删除字符-(平方和频次统计&字符串字典序)_字典序_04

本题的解题思想是贪心策略,选择第i个字母时,在保证最后还有num-i个字母可供选择的条件下,在未选择的字母中选择一个字典序最小的字母。然后再选择第i+1个字母时需要从上一个已选择的字母后面选择,依次类推,具体实现见“源码”。


源码

str_input = input()
t = int(input())

num = len(str_input) - t
str_selected = ''

# 选择num个字符
for i in range(1,num+1):
# 当前选择第i个字符,然后还需选择 num-i 个字符
# 在除去已选字符前面的字符和后面num-i个字符后的前面所有字符中选择一个字典序最小的
char_ = str_input[0]
index = 0
for j in range(1,len(str_input)-num+i):
if str_input[j] < char_:
char_ = str_input[j]
index = j
str_selected += char_
str_input = str_input[index+1:] # 删除选择的字符char_前面的字符

print(str_selected)


上一篇:​​蓝桥杯备战日志(Python)18-第几个幸运数字-(枚举只含某些因子的整数)​

标签:fre,Python,字母,蓝桥,19,num,dict,str,input
From: https://blog.51cto.com/gpnuCITlabCar/6091845

相关文章

  • python之路 78 路飞项目、路飞前台全局css,全局配置文件、安装axios、vue-cookies、ele
    项目演示登录系统管理用户管理角色管理菜单管理部门管理岗位管理最核心创建了用户,授予了角色,因为角色有权限,这个用户就有权限如果这个......
  • python学习——【第十五弹】
    前言上一篇文章​​python学习——【第十四弹】​​​中学习了python中的包与内置模块,这篇文章接着学习python中的文件读写。编码方式在学习文件读写之前,我们先了解下pyth......
  • Python学习笔记
    python()表示元祖,元祖是一种不可变序列创建如:tuple=(1,2,3)取数据tuple[0]......tuple[0,2].....tuple[1,2]......修改元祖:元祖是不可修改的删除元祖de......
  • Python第二天
    反斜线\\、单引号\'、双引号\"单引号、双引号定义一个字符串没有区别,三引号可以换行可以用作多行注释8bit(位)=1byte(字节)1024byte=1kbstr表示字符串(只要是双单引号里的都叫......
  • python爬虫-bs4基础
    #下面的一段HTML代码将作为例子被多次用到.这是爱丽丝梦游仙境的的一段内容(以后内容中简称为爱丽丝的文档):html_doc="""<html><head><title>TheDormouse'ss......
  • 清醒时刻记19
    小A说他人缘不好,在新公司基本上也没什么人去交流,一心去做好工作,反而被孤立了。我划着社交软件,前几天还热烈讨论的群里,现在也变得冷冷清清,人还是要靠自己,一心靠别人或者......
  • linux升级python3.6升级3.7
    1.下载到本地并解压wgethttps://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgztar-zvxfPython-3.7.12.tgzcdPython-3.7.122.编译安装./configure--......
  • [oeasy]python0096_游戏娱乐行业_雅达利_米洛华_四人赛马_影视结合游戏
    游戏娱乐行业回忆上次内容游戏机行业从无到有雅达利公司一枝独秀并且带领行业发展起来雅达利公司优秀员工乔布斯在朋友帮助下完成了《pong》Jobs黑了Woz一部分......
  • Python elasticsearch 使用心得
    一、配置python==3.6/3.8#更高版本的elasticsearch会出现doc_type被统一成_doc导致旧版语句报错的情况pipinstallelasticsearch==7.8.0二、连接esfromelastics......
  • [oeasy]python0096_游戏娱乐行业_雅达利_米洛华_四人赛马_影视结合游戏
    游戏娱乐行业回忆上次内容游戏机行业从无到有雅达利公司一枝独秀并且带领行业发展起来雅达利公司优秀员工乔布斯在朋友帮助下完成了《pong》......