发布网友 发布时间:2022-04-25 10:48
共3个回答
懂视网 时间:2022-04-07 09:50
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
翻译过来就是:
公鸡5元一只,母鸡3元一只,小鸡1元3只,100元买了100只鸡,问各多少只?
下面利用PHP分三种方法来解决这个问题:
假设:
如果公鸡1只,母鸡1只,小鸡1只,则总价为:......,不对。
如果公鸡1只,母鸡1只,小鸡2只,则总价为:......,不对。
如果公鸡1只,母鸡1只,小鸡3只,则总价为:......,不对。
...........................
如果公鸡1只,母鸡2只,小鸡1只,则总价为:......,不对。
如果公鸡1只,母鸡2只,小鸡2只,则总价为:......,不对。
如果公鸡1只,母鸡2只,小鸡3只,则总价为:......,不对。
.............................
如果公鸡100只,母鸡100只,小鸡100只,则总价为:......,不对。
这种编程思想叫做“穷举”,就是将所有可能的答案都罗列出来,然后挨个去验证。
代码如下:
<?php $count = 0; for($gongji = 0;$gongji <= 100;$gongji++){ for ($muji=0; $muji <= 100; $muji++) { for ($xiaoji=0; $xiaoji <= 100 ; $xiaoji++) { if($gongji + $muji + $xiaoji ==100 && $gongji*5 + $muji*3 + $xiaoji / 3 == 100){ echo "<br>公鸡:$gongji,母鸡: $muji,小鸡: $xiaoji"; } $count++; } } } echo "<br>".$count;
结果:
公鸡:0,母鸡: 25,小鸡: 75公鸡:4,母鸡: 18,小鸡: 78公鸡:8,母鸡: 11,小鸡: 81公鸡:12,母鸡: 4,小鸡: 841030301
代码如下
$count = 0; for($gongji = 0;$gongji <= 100 / 5;$gongji++){ for ($muji=0; $muji <= 100 / 3; $muji++) { $xiaoji = 100 - $gongji - $muji; if($gongji*5 + $muji*3 +$xiaoji / 3 == 100){ echo "<br>公鸡:$gongji,母鸡: $muji,小鸡: $xiaoji"; } $count++; } } echo "<br>".$count;
结果:
公鸡:0,母鸡: 25,小鸡: 75公鸡:4,母鸡: 18,小鸡: 78公鸡:8,母鸡: 11,小鸡: 81公鸡:12,母鸡: 4,小鸡: 84714
代码如下
$count = 0; for($gongji = 0;$gongji <= 100 / 5;$gongji++){ for ($muji=0; $muji <= (100-$gongji*5) / 3; $muji++) { $xiaoji = 100 - $gongji - $muji; if($gongji*5 + $muji*3 +$xiaoji / 3 == 100){ echo "<br>公鸡:$gongji,母鸡: $muji,小鸡: $xiaoji"; } $count++; } } echo "<br>".$count;
结果:
公鸡:0,母鸡: 25,小鸡: 75公鸡:4,母鸡: 18,小鸡: 78公鸡:8,母鸡: 11,小鸡: 81公鸡:12,母鸡: 4,小鸡: 84364
总结:
直接用三重for循环是很容易想到的,但是三重循环的复杂度太大了,所以应该想到减少循环。直接把小鸡用总的鸡数减去公鸡和母鸡,就能减少一层循环,这样就能减少运行的时间,提高代码效率。
热心网友 时间:2022-04-07 06:58
设买公鸡x只,买母鸡y只,买小鸡z只,那么根据已知条件列方程,有:
x+y+z=100…………(1)
5x+3y+z/3=100……(2)
(2)×3-(1),得
14x+8y=200
也就是7x+4y=100……(3)
在(3)式中4y和100都是4的倍数:
7x=100-4y=4(25-y)
因此7x也是4的倍数,7和4是互质的,也就是说x必须是4的倍数。
设x=4t
代入(3),得 y=25-7t
再将 x=4t 与 y=25-7t 代入(1),有:
z=75+3t
取t=1 t=2 t=3 就有
x=4 y=18 z=78
或 x=8 y=11 z=81
或 x=12 y=4 z=84
因为x、y、z都必须小于100且都是正整数,所以只有以上三组解符合题意。
解方程依据
1、移项变号:把方程中的某些项带着前面的符号从方程的一边移到另一边,并且加变减,减变加,乘变除以,除以变乘;
2、等式的基本性质:
(1)等式两边同时加(或减)同一个数或同一个代数式,所得的结果仍是等式。用字母表示为:若a=b,c为一个数或一个代数式。
(2)等式的两边同时乘或除以同一个不为0的数,所得的结果仍是等式。用字母表示为:若a=b,c为一个数或一个代数式(不为0)。
热心网友 时间:2022-04-07 08:16
设买公鸡x只,买母鸡y只,买小鸡z只,那么根据已知条件列方程,有: