今天说的是,白鸡百钱问题。 引用
https://blog.csdn.net/lixiangyong123/article/details/55048736 ,表示对原创的尊重。
百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只才一文钱,
用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
首先,这么小的量,可以直接不用数学,直接用原创的代码实现;
当然,我用了数学,先确定 小鸡 的取值区间,而后用步长3 。
简单计算,如果小鸡数量为75 ,母鸡需要25 ,公鸡没有,,不行,
下限 78 ,小鸡的量。
上限84 ,,说明一下,如果小鸡87只,剩余13只全是公鸡,也就65文,加上29文,少于100文。
然后分析公鸡的上限,如果有15只,即使剩下的全是小鸡都超过100文了,暂用它
我的代码如下
dd=0
for i in range(78,87,3):
for k in range(1,15):
ll=100-i-k
if ll<0:
continue
sum =i/3 +5*k +3*ll
dd=dd+1
if sum==100:
print('chick='+str(i))
print('hen='+str(ll))
print('cock='+str(k))
print('-------===========------')
print(dd)
运行结果
chick=78
hen=18
cock=4
-------===========------
chick=81
hen=11
cock=8
-------===========------
chick=84
hen=4
cock=12
-------===========------
42
本循环,一共执行了42次。。
改进的目的,一定是在前人的基础上,去做的;
绝不是践踏,贬低别人用的,
我只是用了上下限思维,把for 循环的次数限制了。仅此而已。
接着,我考虑,如果是千鸡千文,会有几个解。
因为我们考虑数量级的变化。
dd=0 # Number of loops
gh=0 #how many solutions
for k in range(1,150):
for i in range(702,900,3):
ll=1000-i-k
if ll<0:
continue
sum =i/3 +5*k +3*ll
dd=dd+1
if sum==1000:
gh=gh+1
print('chick='+str(i))
print('hen='+str(ll))
print('cock='+str(k))
print('-----------------')
print(dd)
print(gh)
结果
chick=753
hen=243
cock=4
-----------------
chick=756
hen=236
cock=8
-----------------
chick=759
hen=229
cock=12
-----------------
chick=762
hen=222
cock=16
-----------------
chick=765
hen=215
cock=20
-----------------
chick=768
hen=208
cock=24
-----------------
chick=771
hen=201
cock=28
-----------------
chick=774
hen=194
cock=32
-----------------
chick=777
hen=187
cock=36
-----------------
chick=780
hen=180
cock=40
-----------------
chick=783
hen=173
cock=44
-----------------
chick=786
hen=166
cock=48
-----------------
chick=789
hen=159
cock=52
-----------------
chick=792
hen=152
cock=56
-----------------
chick=795
hen=145
cock=60
-----------------
chick=798
hen=138
cock=64
-----------------
chick=801
hen=131
cock=68
-----------------
chick=804
hen=124
cock=72
-----------------
chick=807
hen=117
cock=76
-----------------
chick=810
hen=110
cock=80
-----------------
chick=813
hen=103
cock=84
-----------------
chick=816
hen=96
cock=88
-----------------
chick=819
hen=89
cock=92
-----------------
chick=822
hen=82
cock=96
-----------------
chick=825
hen=75
cock=100
-----------------
chick=828
hen=68
cock=104
-----------------
chick=831
hen=61
cock=108
-----------------
chick=834
hen=54
cock=112
-----------------
chick=837
hen=47
cock=116
-----------------
chick=840
hen=40
cock=120
-----------------
chick=843
hen=33
cock=124
-----------------
chick=846
hen=26
cock=128
-----------------
chick=849
hen=19
cock=132
-----------------
chick=852
hen=12
cock=136
-----------------
chick=855
hen=5
cock=140
-----------------
9458
35
你会发现一个规律,从而,帮你验证,算法的有效性。
共35个解。
公鸡每次增加4只,小鸡增加3只,而母鸡减少7只。 4X5+3X1/3=3*7 。
网友评论