一.枚举是什么
枚举:通过逐个尝试所有可能的值或组合来解决问题的方法。
将问题空间划分为一系列离散的状态,并通过遍历这些状态来寻找解决方案。
二.枚举流程
1.确定解空间(一维,二维等)
2.确定空间边界(每个变量最小值,最大值,步长)
3.估算时间复杂度
4.如果步骤3无法通过,通过减少枚举空间,变换枚举顺序等策略重新从1开始迭代
例题一:字符计数
题目描述
给定一个单词,请计算这个单词中有多少个元音字母,多少个辅音字母。(元音字母包括 a,e,i,o,u共五个,其他均为辅音字母)
输入描述
输入格式:
输入一行,包含一个单词,单词中包含小写英文字母。单词中的字母个数不超过100.
输出描述
输入两行,第一行包含一个整数,表示元音字母的数量,第二行包含一个整数,表示辅音字母的数量。
运行限制
最大运行时间:1s
最大运行内存: 256M
代码:
import os
import sys
s=input("请输入单词:")
sum1=0
sum2=0
for i in s:
if i in 'aeiou':
sum1 +=1
else:
sum2 +=1
print(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 sys
n = 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 +=1
print(ans)
例题三:洁净数
题目描述
小明非常不喜欢数字2,包括那些数位上包含数字2的数。如果一个数的数位不包括数字2,小明将称它为洁净数
请问在整数1至n中,洁净数有多少个?
输入描述
输入的第一行包括一个整数n(1<=n<=1000000)
输出描述
输出的第一行包含一个整数表示答案
运行限制
最大运行时间:1s
最大运行内存:256M
代码
import os
import sys
n =int(input())
ans=0
for i in range(n):
if '2' not in str(i):
ans+=1
print(ans)
例题四:扫雷
题目描述
在一个n行m列的方格图上有一些位置有地雷,另外一些位置为空 。
请问每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
输入描述
输入的第一行包含两个整数n,m
第2行到第n+1行每行包含m个整数,相邻整数之间用一个空格分隔。如果对应的整数为0,表示这一格没有地雷,如果对应的整数为1,表示这一格有地雷。
其中1<=n,m<=100
输出描述
输出 n 行,每行 m 个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 99。
运行限制
最大运行时间:1s
最大运行内存:128M
代码
import os
import sys
def 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]=9
else:
b[i][j]=0
for 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()