一.枚举是什么
枚举:通过逐个尝试所有可能的值或组合来解决问题的方法。
将问题空间划分为一系列离散的状态,并通过遍历这些状态来寻找解决方案。
二.枚举流程
1.确定解空间(一维,二维等)
2.确定空间边界(每个变量最小值,最大值,步长)
3.估算时间复杂度
4.如果步骤3无法通过,通过减少枚举空间,变换枚举顺序等策略重新从1开始迭代
例题一:字符计数
题目描述
给定一个单词,请计算这个单词中有多少个元音字母,多少个辅音字母。(元音字母包括 a,e,i,o,u共五个,其他均为辅音字母)
输入描述
输入格式:
输入一行,包含一个单词,单词中包含小写英文字母。单词中的字母个数不超过100.
输出描述
输入两行,第一行包含一个整数,表示元音字母的数量,第二行包含一个整数,表示辅音字母的数量。
运行限制
最大运行时间:1s
最大运行内存: 256M
代码:
import os
import syss=input("请输入单词:")sum1=0
sum2=0for i in s:if i in 'aeiou':sum1 +=1else:sum2 +=1print(sum1)
print(sum2)
例题二:反倍数
题目描述
给定三个整数a,b,c如果一个整数既不是a的整数倍也不是b的整数倍还不是c的整数倍,则这个数称为反倍数。
请问在1至n中有多少个反倍数
输入描述
输入的第一行包含一个整数 n
第二行包含三个整数a,b,c相邻两个数之间用一个空格分隔
其中,1<=n<=1000000,1<=a<=n, 1<=b<=n,1<=c<=n
输出描述
输出一行包含一个整数,表示答案。
运行限制
最大运行时间1s
最大运行内存:256M
代码
import os
import sysn = int(input())ans = 0 #输出的数值初始化为0#map()函数将int函数应用到字符串列表中的每个元素上,即将每个字符串转换为整数
"""
slit()方法是字符串对象的一个方法。当对输入字符串使用split()方法时,
它会根据默认的分隔符(这里是空格)将字符串分割成多个部分,
例如,如果用户输入“1 2 3”,split()会将其分割成["1","2","3"]这样一个字符串列表
"""
a,b,c=map(int,input().split()) #如果用户输入“123”,那么abc分别被赋值为123 for i in range(1,n+1):if i % a !=0 and i%b!=0 and i%c !=0:ans +=1print(ans)
例题三:洁净数
题目描述
小明非常不喜欢数字2,包括那些数位上包含数字2的数。如果一个数的数位不包括数字2,小明将称它为洁净数
请问在整数1至n中,洁净数有多少个?
输入描述
输入的第一行包括一个整数n(1<=n<=1000000)
输出描述
输出的第一行包含一个整数表示答案
运行限制
最大运行时间:1s
最大运行内存:256M
代码
import os
import sysn =int(input())ans=0for i in range(n):if '2' not in str(i):ans+=1print(ans)
例题四:扫雷
题目描述
在一个n行m列的方格图上有一些位置有地雷,另外一些位置为空 。
请问每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
输入描述
输入的第一行包含两个整数n,m
第2行到第n+1行每行包含m个整数,相邻整数之间用一个空格分隔。如果对应的整数为0,表示这一格没有地雷,如果对应的整数为1,表示这一格有地雷。
其中1<=n,m<=100
输出描述
输出 n 行,每行 m 个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 99。
运行限制
最大运行时间:1s
最大运行内存:128M
代码
import os
import sysdef input_list():return list(map(int,input().split()))n,m=input_list()
a=[]
for i in range(n):a.append(input_list())b = [[0]*m for i in range(n)]dir = [(1,0),(0,1),(-1,0),(0,-1),(-1,-1),(-1,1),(1,-1),(1,1)]#枚举第i行,枚举第j列 <i,j>
for i in range(n):for j in range(m):if a[i][j]==1:b[i][j]=9else:b[i][j]=0for k in range(8):x,y = i+dir[k][0],j+dir[k][1]if 0<=x<n and 0<=y<m:b[i][j]+= a[x][y]print(b[i][j], end=' ')print()