python穷举法

① 数字组合

题目: 有三个数字:1、2、3,能组成多少个互不相同且无重复数字的三位数? 分别是什么?

## 第一种方式
count=0
for i in range(1,4):
    for j in range(1,4):
        for k in range(1,4):
            if i!=j and j!=k and k!=i:
                print(i,j,k)
                count+=1
print(count)

# 第二种方式:给定范围
import itertools
count2=0
a=[1,2,3]
# permutations(iterable, r=None)
# 函数用来在 iterable 中取出 r 个元素进行排列组合
for i in itertools.permutations(a,3):
    print(i)
    count2+=1
print(count2)

# 第三种方式
line=[]
for i in range(100,1000):
    bw = i // 100  # 整除获得百位数("//" 表示整除,比如 3//2=1; "/" 表示浮点运算,比如3/2=1.5)
    sw = i // 10 % 10  # 或者b = (i % 100) // 10
    gw = i % 10
    if gw!=sw and gw!=bw and sw!=bw  and 1<=gw<4 and 1<=sw<4 and 1<=bw<4:
        print(i)
        line.append(i)
print('一共有'+str(len(line))+'个,分别为:',line)

# 第四种方式:减少多余的判断和循环
for i in range(1, 4):
    for j in range(1, 4):
        if (j==i) :
            continue;
        for k in range(1, 4):
            if (k==i or k==j):
                continue;
            print(i,j,k);

② 百钱买百鸡

题目:
公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡各几只?

for i in range(1,21):
    for j in range(1,34):
        for k in range(1,101):
            if (i*5 + j *3 + k / 3 == 100 and i+j+k==100):
                print("公鸡:{} 母鸡:{} 小鸡:{}".format(i,j,k))
for i in range(1,21):
    for j in range(1,34):
        if i*5+j*3+(100-i-j)/3==100:
            print("公鸡:{} 母鸡:{} 小鸡:{}".format(i,j,(100-i-j)))

③ 现在有三个数,分别为a,b,c,它们之间的和为19,取值范围1-9(包括9),但是a,b,c之间不相等,求出能组成多少个互不相同并且不重复的数字?

n = 0
for a in range(1,10):
    for b in range(1,10):
        for c in range(1,10):
            if a != b and a != c and b != c and a + b + c == 19:
                print(a,b,c)
                n += 1

print("组合有"+str(n)+"种")

4. 鸡兔同笼

鸡兔有35头,94足,求鸡和兔分别多少只?

for i in range(36):
    if (i * 2 + (35 - i)* 4 == 94):
        print('有{}只鸡,有{}只兔'.format(i,35-i))

for j in range(36):
    for t in range(36):
        if (j * 2 + t * 4 == 94 and j + t == 35):
            print('有{}只鸡,有{}只兔'.format(j,t))

i = 1
while i <= 35:
    i += 1
    if (i * 2 + (35 - i)* 4 == 94):
        print('有{}只鸡,有{}只兔'.format(i,35-i))

5. 求单打和双打的乒乓球桌

题目:体育馆正在进行乒乓求比赛,42位选手在15张乒乓球桌上进行比赛,正在单打和双打的乒乓求各有几张?

for d in range(15):
    for s in range(15):
        if(d * 2 + s * 4 == 42 and d + s == 15):
            print('单打:{}张,双打:{}张'.format(d,s))   
              
                 
for d in range(15):
        if (d * 2 + (15 - d) * 4 == 42):
            print('单打:{}张,双打:{}张'.format(d,(15 - d)))

6. 求鸡和兔各多少只?

'''
某农民饲养了鸡和兔若干只,已知鸡比兔多13只,
鸡的脚比兔脚多16只,问鸡和兔各多少只?
4x=2×(x+13)-16
4x=2x+26-16
2x=10
x=5
x+13=5+13=18
'''
# ① 假设设兔子t只,则鸡t+13只。
for t in range(21):
    if(t * 4 ==2*(t+13)-16):
        print('兔:{},鸡:{}'.format(t,(t+13)))

# ② 假设鸡有x只,则兔有(x - 13)只
for x in range(21): 
    if(2*x - (x - 13)*4 == 16):
        print('鸡:{},兔:{}'.format(x,(x-13)))      
  • 10
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值