从零开始的Python ACM Ch.9:动态规划
例题:跳台阶假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1
输入:n = 2 输出:2
解释:有两种方法可以爬到楼顶。
1 阶 + 1 阶
2 阶
示例 2:
输入:n = 3 输出:3
解释:有三种方法可以爬到楼顶。
1 阶 + 1 阶 + 1 阶
1 阶 + 2 阶
2 阶 + 1 阶
1 <= n <= 45
题解(递归法)解释:一个steps为n的问题可以看做是steps为n-1和steps为n-2的步骤和
12345678steps = int(input('Steps: ')) # 台阶数def degrade(steps): if steps == 1: return 1 if steps == 2: return 2 return degrade(steps - 1) + degrade(steps - 2)print(degrade(steps))
这个 ...
从零开始的Python ACM Ch.8:综合题目
数据加密一个公司对于一个四位数的整型数字的加密方式为:每位数位上的数字+5后除以十得到余数,将各数位上的余数按照第一位与第四位、第二位与第三位的顺序进行交换,得到最终结果
1234567891011message = input('num: ')message = [message[0], message[1], message[2], message[3]]for i in range(0, len(message)): message[i] = int(message[i]) + 5 % 10message[0], message[1], message[2], message[3] = message[3], message[2], message[1], message[0]result = ''for i in message: result += str(i)print(result)
双色球用程序模拟双色球开奖过程,红色球范围为133,蓝色球范围为116,红色球有6个且数字不能重复,蓝色球只有1个。
输出格式为:红色球 ...
从零开始的Python ACM Ch.7:整数练习
黑洞数
黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同整数,经有限“重排求差”操作,总会得某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。或者是冰雹原理中的“1”黑洞数
求出三位数以内的黑洞数
12345678910111213141516171819202122blackhole_num = set({})def sort(num): num_ascend_ls = sorted(list(str(num))) num_ascend = int(num_ascend_ls[0]+num_ascend_ls[1]+num_ascend_ls[2]) num_decend_ls = list(reversed(sorted(list(str(num))))) num_decend = int(num_decend_ls[0]+num_decend_ls[1]+num_decend_ls[2]) return num_ascend, num_decendfo ...
从零开始的Python ACM Ch.6:质数与整数练习
孪生素数
问题描述本节要研究孪生素数的问题,先来看看什么是孪生素数。所谓孪生素数指的是间隔为2的两个相邻素数,因为它们之间的距离己经近得不能再近了,如同孪生兄弟一样,故将这一对素数称为孪生素数。显然,最小的一对孪生素数是(1,3)。我们可以写出3、100以内的孪生素数,一共有8对,分别是(3,5),(5,7),(11,13),(17,19),(29,31),(41,43),(59,61)和(71,73)。随着数字的增大,孪生素数的分布也越来越稀疏,人工寻找孪生素数变得非常困难。关于孪生素数还存在着一个著名的猜想一孪生素数猜想,即孪生素数是否有无穷多对,这是数论中还有待解决的一个重要问题。此处我们只讨论在有限范围内的孪生素数求解问题。
本节要解决的问题:编程求出3、1000以内的所有孪生素数。
其实很简单,直接遍历就好了
123456789101112131415161718192021222324252627from math import sqrtdef isPrime(num): if num == 2: return True if num % 2 == 0: re ...
从零开始的Python ACM Ch.5:练习系列
求素数
问题描述求给定范围start、end之间的所有素数。
问题分析素数指的是只能被1和它自身整除的整数。判定一个整数m是否为素数的关键,就是要判定整数m能否能被除1和它自身以外的其他任何整数所整除,若都不能整除,则m为素数。本题求的是给定范围start、end之间的所有素数,考虑到程序的通用性,需要从键盘输入start和end的值,例如输入sta:1,end=1000,则所编写的程序应能够打印出1、1000之间的所有素数。
求素数的方法参考:判断一个数是否为质数(素数)的4种方法_是杰夫呀的博客-CSDN博客_如何判断一个数是不是质数
1234567891011121314151617181920from math import sqrtstart = int(input('Start: '))end = int(input('End: '))def isPrime(num): if num == 2: return True if num % 2 == 0: return False i = 3 w ...
从零开始的Python ACM Ch.4:序列和字符串的算法
UVa272 TeX中的引号TEX Quotes - UVA 272 - Virtual Judge (vjudge.net)
在Tex中,左引号是``,右引号是’ ‘。
给定一段包含双引号的段落,你的任务是把它转换成Tex的格式。
个人题解1234567891011121314151617181920212223ArticleInput = '''"To be or not to be," quoth the bard, "thatis the question".The programming contestant replied: "I must disagree.To `C' or not to `C', that is The Question!"'''flag = FalseArticleOutput = ''start = 0for place in range(len(ArticleInpu ...
从零开始的Python ACM Ch.3:队列、链表与二叉树
队列队列,跟现实中一样,遵循先进先出的原则FIFO,从尾巴进去,从头部出来
用列表模拟队列1234567891011class Queue: def __init__(self): self.data = [] def enquen(self, value): self.data.append(value) def dequen(self): value = self.data[0] del self.data[0] return value
删除会比较慢(不如链表构建的队列),因为每次del都是一个完整的O(n)操作
用链表模拟队列1234567891011121314151617181920212223242526272829303132class Node: def __init__(self, value=None, next=None): self.value = value self.next = nextclass Queue: def ...
从零开始的Python ACM Ch.2:时间复杂度、栈、面向对象及链表
列表与字典的时间复杂度列表的ls.append()复杂度是O(n),字典的插入dt['key'] = value的复杂度是O(1)。Python自带的字典排序ls.sort()复杂度是O(nlogn)(这个排序算法是用C语言写的,基本上自己在Python里面写的排序算法都没有它快
栈(Stack)基本操作:
压栈 stack.append(element)
出栈 del stack[-1]
判断是否为空 len(stack) == 0
面向对象的Python编程以栈对象为例
123456789101112class Stack: def __init__(self, x, y): # 构造类里面的函数,在每次实例化的同时会自动调用__init__函数 self.x = x self.y = y self.summary = x + ys = Stack(3, 4) # 得到一个Stack类型的实例(实例化)print(s.x, s.y, s.summary)'''=== Ou ...
从零开始的Python ACM Ch.1:数据类型及基本数据处理
基本数据类型可迭代数据类型通用操作:
遍历
max
min
sum
len
成员测试 in、not in
序列数据类型通用操作:
索引
切片
index
count
同类型加法拼接
整数乘法重复
字符串不可变数据类型(对字符串的所有修改操作,都是返回一个新的字符串)
特有操作:
s.upper()
s.lower()
s.replace(sub1, sub2)
s.join(Iterable[str])
s.format()
s.split(c)
元组不可变数据类型,基本是拿来用索引,或者切片
列表可变数据类型
特有操作:
通过索引进行修改
通过切片进行修改
ls.append(x)
del ls[i] i为元素索引
ls.remove(x) x为元素值
ls.extend(lt2)
ls.insert(i, x)
ls.reverse()
ls.clear()
列表表达式
集合 & 字典集合中的元素、字典的键 都必须为不可变数据类型,不能重复
如果直接对字典进行for循环的遍历,那么出来的是字典的 ...
蓝桥杯2022年B组省赛 —— 个人题解
这篇是后来补发的,过了老久才想起来我的蓝桥杯题解还没发出来,所以这里补一份
试题 A: 排列字母本题总分:5 分
【问题描述】 小蓝要把一个字符串中的字母按其在字母表中的顺序排列。 例如,LANQIAO 排列后为 AAILNOQ。 又如,GOODGOODSTUDYDAYDAYUP 排列后为 AADDDDDGGOOOOPSTUUYYY 。 请问对于以下字符串,排列之后字符串是什么? WHERETHEREISAWILLTHEREISAWAY
【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个由大写字母组成的字符串,在提交答案时只填写这个字符串,填写多余的内 容将无法得分。
123# 忘存代码了print('I forgot to save the code...')
试题 B: 寻找整数本题总分:5 分
【问题描述】 有一个不超过 1017 的正整数 n,知道这个数除以 2 至 49 后的余数如下表 所示,求这个正整数最小是多少。
【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整 ...