龙空技术网

菜鸟学Python——算法学习(1)

人生迷雾的寻道人 108

前言:

当前看官们对“菜鸟python”大概比较关注,我们都需要了解一些“菜鸟python”的相关资讯。那么小编在网摘上网罗了一些关于“菜鸟python””的相关文章,希望小伙伴们能喜欢,同学们一起来学习一下吧!

1、题目

中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?

2、算法

打算采用枚举法。

3、python程序

i=int(100/5)

j=int(100/3)

k=int(300)

a=[]

re=0

for i in range(i):

for j in range(j):

for k in range(k):

re=re+1

A1=i+j+k

A2=i*5+j*3+k/3

if A1==100:

if A2==100:

a.append([i,j,k])

print(a,re)

输出:

[[0, 25, 75], [4, 18, 78]] 45150

4、错误查找

答案是对,但是好像不对劲。

为什么,i=20,j=33,k=300,循环次数应该是,I*J*K=198000次,但是只循环了45150次。

问题出在哪里?

问题之一是在使用range()函数迭代时,使用了与变量i,j,k相同的名称作为迭代变量i,j,k。在Python中,嵌套的循环中,使用相同的变量名会导致变量的值被覆盖,从而导致意外行为。因此需要更改嵌套循环的迭代变量名称以避免冲突。

5、修改代码

将变量i,j,k修改为i1,j1,k1,修改后的代码:

i1=int(100/5)

j1=int(100/3)

k1=int(300)

a=[]

re=0

for i in range(i1): # 使用不同的变量名进行迭代

for j in range(j1):

for k in range(k1):

re=re+1

A1=i+j+k

A2=i*5+j*3+k/3

if A1==100:

if A2==100:

a.append([i,j,k])

print(a,re)

运行结果:

[[0, 25, 75], [4, 18, 78], [8, 11, 81], [12, 4, 84]] 198000

问题解决。

注:预览的时候发现代码前的空格没了,不知道咋回事,知道怎么解决的请留言!

标签: #菜鸟python