2018-12-04

2018-12-04  本文已影响0人  木马音响积木

今天说的是,白鸡百钱问题。 引用
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 。

上一篇下一篇

猜你喜欢

热点阅读