Python:枚举(包含例题字符计数,反倍数,洁净数,扫雷)

一.枚举是什么

枚举:通过逐个尝试所有可能的值或组合来解决问题的方法。

将问题空间划分为一系列离散的状态,并通过遍历这些状态来寻找解决方案。

二.枚举流程

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值