百钱买百鸡
一只公鸡5钱,一只母鸡3钱,3只小鸡1钱,问100钱买100只鸡有几种方案,每种方案分别要有公鸡\母鸡\小鸡;
我的程序如下:(哪错了,请指点!??)
main()
{
int x,j,z;
int b;
int n=0;
int a;
for(x=1;x<=20;x++)
for(j=1;j<=33;j++)
for(z=1;z<=100-x-j;z++)
{
b=x*5+j*3+(1/3)*z;
if(b==100&&x+j+z==100)
{n+=1;
printf("%d %d %d\n",x,j,z);}
}
printf("%d\n",n);
}
[[italic] 本帖最后由 XMeLoDy 于 2008-1-8 20:20 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
1.注意这条语句
b=x*5+j*3+(1/3)*z;
其中
1/3 = 0
2.如果令x, j 从0开始循环,z=100-x-j, 可以少一层循环。
----------------解决方案--------------------------------------------------------
同意楼上的第一点说法..
但是要怎么修改呢?
----------------解决方案--------------------------------------------------------
写程序之前先简单分析一下,这个是三元一次方程:
(1) x * 5 + y * 2 + z / 3 = 100
(2) x + y + z = 100
可以得到两点(都是很明显的):
(1) z是3的倍数
(2) z < 100, x < 20, y < 34
利用这两点去做题,就容易了一些。
程序代码:
for (z = 0; z < 100; z += 3)
{
for (x = 0; x < 20; x++)
{
y = 100 - x - z;
if (100 == x * 5 + y * 3 + z / 3)
printf("x = %d, y = %d, z = %d", x, y, z);
}
}
{
for (x = 0; x < 20; x++)
{
y = 100 - x - z;
if (100 == x * 5 + y * 3 + z / 3)
printf("x = %d, y = %d, z = %d", x, y, z);
}
}
[[italic] 本帖最后由 zbqf109 于 2008-1-8 22:10 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
我来帮你改一下吧!!!!
#include "stdio.h"main()
{ int x, y, z,i;
for ( x=0;x<=20; x++)
for( y=0;y<=34;y++)
{ z=100-x-y;
if( (z%3==0)&&(5*x+3*y+z/3==100) )
{printf ( "公鸡=%d ,母鸡=%d ,小鸡=%d\n",x ,y z);
}
}
}
----------------解决方案--------------------------------------------------------
很简单的改法!!!
把b=x*5+j*3+(1/3)*z;改为b=x*5+j*3+(1.0/3)*z;就行了
1.0/3其结果为一浮点行
----------------解决方案--------------------------------------------------------
回复 4# 的帖子
因为公鸡母鸡小鸡都要有,所以循环不能从零开始,从1
变量Z是小鸡吧,Y是母鸡吧?
y = 100 - x - z不行,会出现负数,因为Z的范围达到99
----------------解决方案--------------------------------------------------------
回复 2# 的帖子
公鸡母鸡小鸡都要有,所以不能从0吧? ----------------解决方案--------------------------------------------------------
回复 5# 的帖子
{printf ( "公鸡=%d ,母鸡=%d ,小鸡=%d\n",x ,y z);少了个逗号,修改后,,结果为什么跟我的不一样啊,,,但是条件都成立了;
main()
{
int x,j,z;
int b;
int n=0;
int a;
for(x=1;x<=20;x++)
for(j=1;j<=34;j++)
for(z=1;z<=100-x-j;z++)
{
b=x*5+j*3+(1/3.0)*z;
if((b==100)&&(x+j+z==100))
{n+=1;
printf("%d %d %d\n",x,j,z);}
}
printf("%d\n",n);
}
----------------解决方案--------------------------------------------------------