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