番禺教育局咨询电话:如何编写出百钱买百鸡这个程序?

来源:百度文库 编辑:中科新闻网 时间:2024/04/20 15:31:02
有vb编写 而且是用do while来编
小鸡每只5角,公鸡每只2元,母鸡每只3元。
x+y+z=100
3x+2y+0.5z=100
除了do while 还有别的吗?

dim a,b,c
for a=0 to 33
for b=0 to 50
for c=0 to 200
if a+b+c=100 and 3*a+2*b+0.5*c=100
print a & "," & b & "," & c
next c
next b
next a

此题不一定是唯一解,所以不可以取到1个组合就break

Dim x As Integer
Dim y As Integer
Dim z As Integer

Do While x <= 33
y = 0
Do While y <= 55
z = 0
Do While z <= 100
If (x + y + z = 100 And 3 * x + 2 * y + 0.5 * z = 100) Then Print x & "," & y & "," & z
z = z + 1
Loop
y = y + 1
Loop
x = x + 1
Loop

Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim i As Integer
For a = 0 To 33
For b = 0 To 50
For c = 0 To 200
If a + b + c = 100 And 3 * a + 2 * b + 0.5 * c = 100 Then
Print a & "," & b & "," & c
End If
Next
Next
Next

dim x as integer
dim y as integer
x=0
do while x<33
y=0
do while y<(100-3*x)/2
if 3*x+2*y+(100-x-y)/2-100<0.0001 then
print x,y,100-x-y
endif
y=y+1
loop
x=x+1
loop

1、本程序注意效率
本程序两层循环可解决问题,并且第二层不必全部循环到50。
2、本程序注意系统计算误差控制,不用两个计算值直接进行相等比较,采用相减差小于某一小值控制。
x代表母鸡
y代表公鸡
100-x-y代表小鸡

#include "stdio.h"
main()
{int i,j,k;
for(i=0;i<=33;i++)
for(j=0;j<=50;j++)
for(k=0;k<=200;k++)
if((i+j+k==100)&&(i*3+j*2+0.5*k==100))
printf("母鸡、公鸡、小鸡的只数分别是:%d,%d,%d\n",i,j,k);
}

用do while不大好吧,明显上条件语句循环,虽然都可以,我觉得用IF END IF思路比较明白,上边的都可以吧,没实验。结果太多了