算法-百钱买白鸡(代码片段)

bky-nll bky-nll     2022-12-17     533

关键词:

   百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,

用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。

  分析:估计现在小学生都能手工推算这套题,只不过我们用计算机来推算,我们可以设公鸡为x,母鸡为y,小鸡为z,那么我们可以得出如下的不定方程

          x+y+z=100,

          5x+3y+z/3=100,

下面再看看x,y,z的取值范围,由于只有100文钱,则5x<100 => 0<x<20, 同理  0<y<33,那么z=100-x-y,好,我们已经分析清楚了,下面就可以编码了。

 1 public static void main(String[] args) 
 2         //公鸡的上线
 3         for (int x = 1; x < 20; x++) 
 4             // 母鸡的上线
 5             for (int y = 1; y < 33; y++) 
 6                 // 剩余小鸡
 7                 int z = 100 - x - y;
 8                 if ((z % 3 == 0) && (x * 5 + y * 3 + z / 3 == 100)) 
 9                     System.out.println("公鸡"+ x+",母鸡"+y+",小鸡"+z);
10                 
11             
12         
13     

运行结果:

公鸡4,母鸡18,小鸡78
公鸡8,母鸡11,小鸡81
公鸡12,母鸡4,小鸡84

  结果出来了,确实这道题非常简单,我们要知道目前的时间复杂度是O(N2),实际应用中这个复杂度是不能让你接受的,最多最多能让人接受的是O(N)。

所以说我们必须要优化一下,从结果中我们可以发现这样的一个规律:公鸡是4的倍数,母鸡是7的递减率,小鸡是3的递增率,规律哪里来,肯定需要我们

推算一下这个不定方程:

    x+y+z=100           ①

    5x+3y+z/3=100    ②

 令②x3-① 可得

    7x+4y=100

 =>y=25-(7/4)x          ③

又因为0<y<100的自然数,则可令

     x=4k                     ④

将④代入③可得

=> y=25-7k               ⑤

将④⑤代入①可知

=> z=75+3k              ⑥

要保证0<x,y,z<100的话,k的取值范围只能是1,2,3,下面我们继续上代码:

1 int x, y, z;
2 for (int k = 1; k <= 3; k++)
3     x = 4 * k;
4     y = 25 - 7 * k;
5     z = 75 + 3 * k;
6     System.out.println("公鸡"+ x+",母鸡"+y+",小鸡"+z);
7 

运行结果:

公鸡4,母鸡18,小鸡78
公鸡8,母鸡11,小鸡81
公鸡12,母鸡4,小鸡84

这一次我们做到了O(N)的时间复杂度,很不错吧。

 





javascript百钱白鸡问题多种解答思路(代码片段)

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metanam 查看详情

javascript百钱白鸡问题多种解答思路(代码片段)

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metanam 查看详情

百钱买百鸡(代码片段)

...学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?用go语言如何实现?方法一packagemainimport"fmt"funcmain()varnint//i为鸡翁、j为鸡母、k为鸡雏fori:=0;i<=100;i++forj:=0;j<=100;j++fork:=0;k<=... 查看详情

百钱买百鸡(代码片段)

...鸡中,公鸡、母鸡和小鸡各是多少只?分析与解答:根据百钱买百鸡的要求,可以假设一共有i只公鸡,j只母鸡,k只小鸡,并且i+j+k的总数为100,即i×5+j×3+k/3=100(k必须是3的倍数)。依次对公鸡、母鸡、小鸡的总数循环,进而求... 查看详情

百钱买鸡鸣(代码片段)

百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱... 查看详情

华为机试题hj72百钱买百鸡问题(代码片段)

HJ72百钱买百鸡问题一、题目描述二、参考代码1三、参考代码2一、题目描述公元五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母... 查看详情

比较“笨”的枚举算法(代码片段)

枚举即一一列举。一、枚举算法的思想  将问题所有的可能答案一一列举,然后根据实际情况选择合适而丢弃不合适的。在c语言中,枚举算法一般使用while循环实现。二、实例演练(1)“百钱买百鸡”问题:鸡翁一,值钱五... 查看详情

java算法之百钱买百鸡问题

题目:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。解:设,公鸡x只,母鸡y只,小鸡z只。x+y+z=1005x+3y+1/3z=100(0<x... 查看详情

zznuoj_c语言1074:百钱买百鸡(完整代码)(代码片段)

题目描述百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只? 本程序要求解的问题是:给定一个正整数n,用n文钱买n只鸡,问公鸡、母鸡、小鸡各买多... 查看详情

百钱白鸡(for循环的练习)(代码片段)

...itle></head><body></body></html><script>//百钱百鸡公鸡2文,母鸡1文,小鸡半文,每种至少一只,100文买100只鸡有多少可能性//写条件gj*2+mj*1+xj*0.5==100&&gj+mj+xj=100varnum=0;for(vargj=1;gj<=50;gj++)for(varmj=1;mj<=100;mj... 查看详情

华为机试hj72:百钱买百鸡问题(代码片段)

...a;鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何 查看详情

程序逻辑知识

逻辑思维题   算法   随机数   案例讲解 猜字游戏     百钱买白鸡问题     穷举法   程序错误与调试     常见错误    编译错误     运行时错误     逻辑错误... 查看详情

pta7-6百钱买百鸡问题(15分)(代码片段)

#include<stdio.h>intmain()intx;intcount=0;scanf("%d",&x);for(inti=1;i<20;i++)for(intj=1;j<33;j++)for(intk=0;k<276;k+=3)if((i+j+k==100)&&(i*5+j*3+k/3==100))count++;printf("%d%d%d",i,j,k);if(count<x)printf("");elsereturn0; 查看详情

c语言程序设计百钱买百鸡(百钱百鸡,百鸡问题)!(代码片段)

...古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何? 实现过程:使用for... 查看详情

百钱买百鸡

publicclassSample1//百钱买百鸡/*鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?*/{ publicstaticvoidmain(String[]args){ intx;//可买鸡翁只数 inty;//可买鸡母只数 intz;//可买鸡雏只数 for(x=0;x<=10... 查看详情

python每日一练——第4天:百钱百鸡问题(升级版)(代码片段)

...费订阅!!!文章目录1.问题描述2.问题分析3.算法思路4.代码实现5.算法升级《100天精通Python从入门到就业》专栏推荐白嫖80G学习大礼包1.问题描述我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡... 查看详情

0002_百钱买鸡

百钱买鸡:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱?思路:设定公鸡,母鸡,小鸡各买x,y,z只,则满足下列条件... 查看详情

p63思考题.五次循环解决百鸡百钱问题(代码片段)

...只;雏鸡1钱3只.百钱买百鸡,求各几只.书上给出了一种简化算法:设chick=100-hen-rooster 代替判定条件rooster+hen+chick=100,因此只需二重循环即可解决问题.而这个问题,经过思考之后,可以由一重循环求解. #include<stdio.h> 查看详情