算法学习第一天(python)---枚举法

枚举法就是将一件事发生的所有可能罗列出来,又称为“穷举法”,根据它的名字不难看出它要求结果是有限个且规模不是特别大,一般都是现实生活中问题的直译

本文由易到难举出大量例子,来熟练这种算法(我自己的一个练习过程)

例如

1.想要知道一个食品袋中鸡蛋的个数,就可以一个一个拿出来(循环),分别判断它是不是鸡蛋,是,就增加一个计数,不是就不计,然后判断食品袋中是否为空,为空则推出循环,不空则继续。

【这里可以将测试数据放到一个数组中,然后初始化计数器,从数组第一个元素进行对比,如果该元素中的数值等于目标数值则计数,python中的len()函数可以计算数组中元素的个数,将循环范围限制在数组元素个数中,就可以避免报错】

当然,python中count()函数可以直接进行统计

#将用户输入的字符串转化为整数列表
array=list(map(int,input().split()))
#假设1代表鸡蛋,统计1的个数
res=arry.count(1)
print(res)

2.加入数学逻辑。已知食品袋中的鸡蛋三个三个数剩两个,五个五个数剩三个,七个七个数剩两个,求食品袋中有多少个鸡蛋(鸡蛋范围100~999)。也就是求100~999范围内同时满足上面三个条件的数,除3余2,除5余3,除7余2

result=[]
for i in range(100,1000):
  if i%3==2 and i%5==3 and i%7==2:
    result.append(i)
print(result)

3.猜密码。某个密码是六位数,前两位为31,最后两位数字相同,能被16和46整除,找出所有可能的密码并统计其个数。

六位数已知前两位,也就是求后四位的数字,范围0000~9999,最后两位数字相同00,11,22,33,44,55,66,77,88,99,且能被16和14整除 。要紧抓范围和条件

count=0
for i in range(0,10000):
  res=310000+i
  if i%16==0 and i%46==0:
    a=res%10
    b=(res%100)//10
    if a==b:
      print(res)
      count=count+1
    
    

4.摘苹果。输入苹果的个数和它们分别的高度,人手能伸到的高度,板凳的高度,判断能摘到的苹果个数。设立一个数组存放苹果的高度,人能碰到的最大高度为手+板凳的高度,将苹果高度和 这个最大高度一一比较。

#输入苹果的个数
n=int(input())
#分别输入每个苹果的高度
a=list(int,input().split())
#输入人手臂可以触碰到的最高高度,板凳高度
m,n=int(input().split())
l=m+n
b=[]
count=0
for i in range(n):
  if a[i]<=l:
    b.append(a[i])
    count=count+1
print(b)
print(count)

5.求正整数。对于输入的任意正整数n,求具有n个不同因子的最小正整数m(1≤n≤5000)

【也就是求1到5000范围内的数m,m有n个不同因子】

import math

n=int(input())
#定义函数计算因子数
def count(m):
  for i in range(1,int(math.sqrt(m))+1):
    if m%i==0:
      sn=sn+2
    if m==i*i:
      sn=sn-1
  return sn
#在范围1~50000中查询
for j in range(1,50001):
  if count(j)==n:
    print(j)
    exit()


6.如何用100块钱恰好买100只鸡:大鸡三块一只,小鸡一块三只,不大不小的鸡两块一只

【大鸡100能买33只,中鸡100能买50只,小鸡100能买300只,所以我们的思路是分别遍历取到的大鸡小鸡的个数,然后计算它是否满足条件】

#设三种鸡的个数分别为x、y、z
n=100
for x in range(0,34):
    for y in range(0,51):
        z=3*(100-3*x-2*y)
        if x+y+z==100:
            print(x,y,z)

7.(思考)数字三角形。输入边长p,求满足下述条件的三角形方案和个数,a~i分别代表1~9

        a

      b    c

   d           e

f      g     h     i

条件:

(1)a<f<i

(2)b<d;g<h;c<e

(3)a+b+d+f=f+g+h+i=i+e+c+a=p

------未完待续

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值