想看看大家是怎么实现百鸡百钱问题的

只会百度的程序员 发布于 2013/04/15 10:12
阅读 899
收藏 3

技术人有1说1,云栖大会热门话题,技术人把酒言欢,马上预约看直播!>>>

RT,如果大家有兴趣,可以用任何语言把百鸡百钱的问题实现下。
加载中
0
只会百度的程序员
只会百度的程序员

先来看看当年我愚蠢的代码:

public class Chicken {
	public static void main(String[] args) {
		System.out.println("公鸡\t母鸡\t小鸡");
		for(int i = 1;i < 20;++i){
			for(int j = 1;j < 33; j++){
				for(int k = 3; k < 99;k += 3){
					if(i + j + k == 100 && 5 * i + 3 * j + k/3 == 100){
						System.out.printf("%s\t%s\t%s\n",i,j,k);
					}
				}
			}
		}
	}
}

依然傻笑
依然傻笑
回复 @只会百度的程序员 : 之前写的,找不到了= =!!!现在写的话,直接就穷举。。。
只会百度的程序员
只会百度的程序员
回复 @依然傻笑 : 其实我是想看你现在写出来的样子。。。C也行,语言不限。
只会百度的程序员
只会百度的程序员
回复 @习总 : 你又卖萌了。。。确实很水的。。。
依然傻笑
依然傻笑
= =!一开始时候的代码也这样子,不过是c的。。。
0
云卷江南
云卷江南
谁知道百鸡百钱用Oracle怎么效率才高!
0
恺哥
恺哥

普及一下:

我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

只会百度的程序员
只会百度的程序员
thank you!
0
random_walk
random_walk

丢番图方程

缪斯的情人
缪斯的情人
数学不错啊,不定方程都整出来
0
Y-QTCe
Y-QTCe
with a as( 
  select  5*rownum ax, rownum an from dual 
  connect by rownum <=20 
), 
 b as  ( 
  select 3*rownum as bx, rownum bn from dual 
  connect by rownum <= 34 
), 
 c as  ( 
  select  1/3*rownum cx,rownum cn from dual 
  connect by rownum <= 100 
) 
select an,bn,cn from a,b,c where ax+bx+cx = 100  and an+bn+cn = 100 

0
jwjiang
jwjiang
for (float fCock = 0; fCock < 20; fCock++) 
            { 
                float fHen = 25 - fCock * 7 / 4; 
                float fChicken = 75 + fCock * 3 / 4; 
                if (fHen >= 0 && fChicken >= 0 && fChicken % 3 == 0 && fHen + fChicken + fCock == 100) 
                { 
                    Console.WriteLine(string.Format("公鸡:{0},母鸡:{1},小鸡:{2}", fCock, fHen, fChicken)); 
                } 
            } 
Console.ReadLine();

投机取巧...

0
Administra
Administra

不用程序也不算麻烦
解方程组
{5 x + 3 y + z/3 = 100, x + y + z = 100, z = 3 t}

得x=4t-100,   y=200-7t,   z=3t
y>0,即200-7t>0,得t <= 28
x>0,即4t-100>0,的t>=26
所以t可以是(26,27,28),带入x,y,z得到3组解

只会百度的程序员
只会百度的程序员
其实我就是看到这个才想看看大家怎么做的。后来想想,做到这个份上,有点过了,我觉得两层循环就已经差不多了。真要这样,就直接解方程组好了,不要写代码了。。。
0
houlu
houlu

用python写的代码:

#百钱买百鸡
def func(money, sumOfChi):
    #X公鸡,Y母鸡,Z雏鸡
    a = []
    for chiX in range(int(money/5) + 1):
        for chiY in range(int((money - 5*chiX)/3) + 1):
            chiZ = int((money - 5 * chiX - 3 * chiY) * 3)
            if chiX + chiY + chiZ == sumOfChi:
                a.append((chiX, chiY, chiZ))
    return a

print(func(100, 100))

返回顶部
顶部