穷举法

1、介绍

穷举法是将所有的可能性罗列出来,在其中寻找答案的一种方法。理论上讲,穷举法几乎能解决所有问题,但是穷举法通常效率差,就算使用一般也需要做一些优化。

2、实例1

有5个海盗相约进行一次帆船比赛,先后经过一个无名的荒岛,并且每个人都觉得自己是第一个经过该岛的人。 第一个人在沙滩上发现了一堆金币。他把金币分成5等份。发现刚好少一个金币。他就从自己口袋拿出一个金币补充进去,然后把属于自己的那份拿走。第二个到达的人也看到了金币,他也和第一个人一样,把所有金币5等分,发现刚好缺少一个金币,于是自己补进去一个,拿走了属于自己的那份。第三,第四,第五人的情况一模一样。等他们到了目的地,都说自己的情况,才恍然大悟,一起去荒岛找金币,然而再也没有找到荒岛。他们都惋惜地说:岛上还有一千多枚金币呢!请你根据这些信息,推算荒岛上最初有多少金币?

代码实现:(python3)

#海盗离开岛后,接下来另一个海盗还未到岛时,岛上的金币数量为n,判断此n是否符合题意
def panduan(n):
    T=False
    if (n+1)%5==0:
        T=True
    return T

#sum表示起初岛上的金币数量,i表示第i个海盗,返回值表示第i个海盗离开后剩余的金币数量
def sheng(sum,i):
    if i==1:
        return 4 * (sum+1) / 5
    else:
        return 4*(sheng(sum,i-1)+1)/5
#求起初岛上的金币数量(穷举法)
for i in range(1000,5000):#(1000,5000)是通过看出来的,这里也可以做进一步优化
    if panduan(sheng(i,1)) and panduan(sheng(i,2)) and panduan(sheng(i,3)) and panduan(sheng(i,4)):
        if sheng(i,5)>1000 and sheng(i,5)<2000:
            print(i)

3、实例3

现在有n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:

注意:

  1. 加号与等号各自需要两根火柴棍

  2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)

  3. n根火柴棍必须全部用上

现在只有n(n<=24)根火柴,可以拼多少个等式?

代码实现:(python3)

n = int(input())
list = [6,2,5,5,4,5,6,3,7,6]
#制作0~999对应的火柴棒列表
for i in range(10,100):
    gewei = i%10
    shiwei = i//10
    list.append(list[gewei]+list[shiwei])
for i in range(100,1000):
    baiwei = i//100
    shiwei = i//10
    gewei = i%10
    list.append(list[gewei]+list[shiwei])
    
count = 0  #用于计数
#穷举(部分优化)
for x in range(0,1000):
    if list[x]<=18:
       for y in range(0,1000):
           if (list[x]+list[y]<=18) and ((x+y)<1000 and (list[x]+list[y]+list[x+y]==(n-4))):
                count = count + 1
print(count,end='')
发布了16 篇原创文章 · 获赞 2 · 访问量 737

猜你喜欢

转载自blog.csdn.net/qq_41475583/article/details/104546743
今日推荐