100元买100只鸡,公鸡5元1只,母鸡3元1只,小鸡5角1只,问有多少种方案。java编程题。

请用java编程

“公鸡每只5元,母鸡每只3元,小鸡三只1元,现有100元,要求买100只鸡,公鸡、母鸡、小鸡各多少只?”

解题思路:公鸡每只5元,最多要少于20只;

母鸡每只3元,最多要少于33只;

小鸡至少要有3只。

小鸡三只1元,要凑够100元100只鸡。

公鸡数:cocks

母鸡数:hens

小鸡数:chickens

买公鸡钱数 = 5×cocks

买母鸡钱数 = 3×hens

买小鸡钱数 = 1/3 × chickens

cocks + hens + chickens = 100 (1)

5×cocks + 3×hens + 1/3× chickens=100 (2)

这个题目有三个未知数,但根据已知条件只能列出两个式子。

公鸡是每只5元,要想总数为100元,公鸡数必须是偶数。

母鸡和小鸡一个是三元1只,一个是一元三只,说明小鸡的个数必须是3的倍数,而母鸡的钱数必须是3的倍数。还有母鸡钱数的个位和小鸡钱数的个位的和要等于10。

尽管有这些条件的约束,但由于少一个条件,都有可能有多个解。

可以先定公鸡为cocks =1

如hens =21 chickens= 78

先保证 (1)式成立时

(2)=94

因为小鸡必须以三个为单位变化,减三个小鸡又必须增三个母鸡。而减三个小鸡少一元,增三个母鸡多9元,相差8元。

所以如hens =24 chickens= 75

则(2)=102

所以cocks 不能等于1

同样cocks 也不能等于2和3

当cocks=4时

如如hens =18 chickens= 78

能使(2)式成立

即cocks=4时 hens =18 chickens= 78

(1)、(2)式都成立。

同样方法试验可知

cocks=8时 hens =11 chickens= 81

(1)、(2)式都成立。

cocks=12时 hens =4 chickens= 84

(1)、(2)式都成立。

这个题目没有找到一般的解法,不知还有没有更好的解法。

既然是试验,可以编一个小程序来实现。

如用C语言的FOR循环来编,示例如下:

#include <stdio.h>
main()
{
int x, y, z;
for (x=0; x<20; x++)
for (y=0; y<33; y++)
{
z=100-x-y;
if ((z%3==0)&&(5*x+3*y+z/3==100))
printf("cock=%d\t hen=%d\t chicken=%d\n", x, y, z);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-02-06
package applet_test;
import javax.swing.*;

import java.awt.Container;
public class buy extends JApplet
{
public void init()
{
int a,b;
String output="";
JTextArea outputArea = new JTextArea( 10, 20 );
Container c = getContentPane();
c.add(outputArea);
for(a=1;a<20;a++)
{
for (b=1;b<33;b++)
{
if(a*5+b*3+(100-a-b)/2==100)
{
output+="\n公鸡:"+a+"只 母鸡:"+b+"只 小鸡:"+(100-a-b)+"只";

}
}
}
outputArea.setText( output );
}
}

正好前几天给朋友做过这个.本回答被提问者采纳
第2个回答  2007-02-06
用PASCAL来编
var a,b,c:integer;
begin
for a:=1 to 99 do
for b:=1 to 99 do
for c:=1 to 99 do
begin
if (a+b+c<>100) or (c mod 2<>0) then continue;
if (a*5+b*3+c div 2=100) then writeln(a,' ',b,' ',c);
end;
end.
相似回答