无锡泰隆祥:百鸡问题:“鸡公一只五钱,鸡母一只三钱,小鸡三只一钱,用百钱买百鸡,问鸡翁、鸡母、小鸡各几只?”

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 03:30:18
这是我们电脑书上的题目,设计一个求解的算法,用自然语言把它描述出来。好像要用什么do循环语句,拜托各位了!

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Cock, Hen, Chicken As Integer '分别用来存放公鸡数、母鸡数和小鸡数
Dim i As Integer = 0 '存放第几种方案
For Cock = 1 To 19 '公鸡数从1到19
For Hen = 1 To 33 '母鸡数从1到33
Chicken = 100 - Cock - Hen '小鸡数为100减去公鸡数和母鸡数
If (Chicken Mod 3 = 0) Then '小鸡数应能被3整除
'刚好是100元钱,则是一种方案,输出
If (Cock * 5 + Hen * 3 + Chicken / 3 = 100) Then
i = i + 1 '方案号加1
TextBox1.Text = TextBox1.Text + "方案" + CStr(i) + " 公鸡: " _
+ CStr(Cock) + " 母鸡: " + CStr(Hen) + " 小鸡: " + CStr(Chicken) + Chr(13) + Chr(10)
End If
End If
Next Hen
Next Cock
End Sub

private sub cmdCalculate_Click()
dim x as integer
dim y as integer
dim z as integer
for x=0 to 100
for y=0 to 100

5X+3Y+1/3Z=100

用穷举法(枚举法)就行了
设母鸡、公鸡、小鸡各为x y z只
有方程:x+y+z=100
3x+2y+0.5z=100
方法一
private sub form_ click()
'dim x%,y%,z%
for x=0 to 100
for y=0 to 100
for z=0 to 100
if x+y+z=100 and 3*x+2*y+0.5*z=100 then
print x,y,z
end if
next z
next y
next x
end sub

方法二
private sub form_ click()
'dim x%,y%,z%
for x=0 to 33
for y=0 to 50
if 3 * x+2 * y+ 0.5 * (100-x-y)=100 then
print x,y,100-x-y
end if
next y
next x
end sub

这是我们教材上的例题,法一用时较长,法二比较快得出答案。

可以用穷举法啊:(调试环境TC)
#include <stdio.h>
void main()
{
int x,y,z;
for(x=0;x<=33;x++)
for(y=0;y<=50;y++)
{z=100-x-y;
if(z>=0)&&(3*x+2*y+0.5*z==100)
printf("cock:%d ,hen:%d, chicken:%d,",x,y,z); }
}

program chicken1;
var
i,j,k;integer;
begin
writeln('cock':10,'hen':10,'chicken':10);
for i:=0 to 14 do
for j:=0 to 25 do
begin
k:=100-i-j;
if i*5+j*3+k/3*1=100
then writeln(i:10,j:10,k:10);
end;
end