目录
复习回顾
1 成绩统计
2 排列字母
3 纸张尺寸
1 枚举题
1.1 枚举的思想
1.2 枚举解题的要素
1.3 枚举的步骤
1.3.1 例题
2 枚举技术
2.1 组合型枚举
2.2 排列型枚举
3 二进制法
用cnt1表示及格的人数,cnt2表示优秀的人数,答案即为cnt1/n、cnt2/n四舍五入后乘100!
不要忘记输出百分号!
import os
import sys
# 请在此输入您的代码
n = int(input())
cnt1 = 0
cnt2 = 0
for i in range(1,n+1):
x = int(input())
if x >= 60:
cnt1 += 1
if x >= 85:
cnt2 += 1
print("{:.0f}%".format(round(100.0 * cnt1 / n,2)))
print("{:.0f}%".format(round(100.0 * cnt2 / n,2)))
5
0
100
60
85
70
80%
40%
直接对字符串进行排序即可,使用标准排序函数。
Python先转换成 list 再进行排序,最后拼接成字符串(因为 Python 中无法修改字符串元素)。
import os
import sys
# 请在此输入您的代码
s = 'WHERETHEREISAWILLTHEREISAWAY'
s = list(s)
s.sort()
print("".join(s))
out=AAAEEEEEEHHHIIILLRRRSSTTWWWY
⚠️join函数前面是 .
根据题意维护长边长度a和短边长度b。
对于输入A0而言,a=1189, b=841。 根据输入的A后面的数字x,循环x次:
每次让长边a除以2(向下取整),短边b不变。
然后再根据a,b的大小关系进行调整,如果a
短边变成长边,长边的一半变为短边。
题目需要处理大量同类情况
暴力枚举所有情况 (枚举是暴力的一种)
利用计算机强大的算力
注意:不要遗漏任何情况
注意:如果枚举量太大,需要剪枝
将问题的所有可能成为答案的解一一列举,然后根据问题所给出的条件判断此解是否合适,如果合适就保留,反之则舍弃。
确定枚举解的范围,以及判断条件
选取合适枚举方法,进行逐一枚举,此时应注意能否覆盖所有的可能的解
在枚举时使用判断条件检验,留下所有符合要求的解。
1.根据题目确定枚举的范围,并选取合适的枚举方式,不能遗漏任何一个真正解,同时避免重复。
2.为了提高解决问题的效率,看题目是否存在优化,将可能成为解的答案范围尽可能缩小。
3.根据问题找到合理、准确描述、易编码的验证条件。
4.枚举并判断是否符合第3步确定的的条件,并保存符合条件的解。
5.按要求输出枚举过程中留下的符合条件的解。
蓝桥杯题库613
一个整数如果只含有因子3、5、7,称为幸运数字。 前10个幸运数字是3、5、7、9、15、21、25、27、35、45。 问59084709587505 是第几个幸运数字。
【题目描述】一个整数如果只含有因子3、5、7,称为幸运数字。问59084709587505是第几个幸运数字。
【解题思路】暴力枚举。这个系列的数可以表示为3^i × 5^j × 7^k,枚举所有不超过范围的i、j、k组合。代码中最小的3^50肯定超过59084709587505。
import numpy as np
cnt=0
for i in range(50):
for j in range(50):
for k in range(50):
a = 3**i
b = 5**j
c = 7**k
if a*b*c <=59084709587505:
cnt += 1
print(cnt-1)
#out=1906-1=1905; 1不是幸运数字!
把所有情况排列、组合出来,逐个处理。
确认n和m的数量后,我们可以直接套模版,输出结果。
import numpy as np
chosen = []
n = 0
m = 0
def calc(x):
if len(chosen) > m:
return
if len(chosen) + n - x + 1 < m:
return
if x == n + 1:
for i in chosen:
print(i,end=' ')
print(' ')
return
calc(x + 1)
chosen.pop()
if __name__ == '__main__':
tem = input().split()
n = int(tem[0])
m = int(tem[1])
calc(1)
全排列
order = [0] * 20
chosen = [0] * 20
n = 0
def calc(x):
if x == n + 1:
ansTem = ''
for i in range(1, n + 1):
print(order[i],end=' ')
print('')
return
for i in range(1,n+1):
if(chosen[i]==1):
continue
order[x]=i
chosen[i]=1
calc(x+1)
chosen[i]=0
order[x]=0
if __name__ == '__main__':
n = int(input())
calc(1)
Python排列函数permutations():
功能:连续返回由 iterable序列中的元素生成的长度为r的排列。
如果r未指定或为None,r默认设置为 iterable 的长度,即生成包含所有元素的全排列。
from itertools import*
s = ['a','b','c']
for element in permutations(s,2):
a = element[0] + element[1]
#或者这样写:
a = ".join(element)
print(a)
(2023年 4月6日 22:55首次发布)