当前位置: 代码迷 >> C语言 >> 百钱买百鸡
  详细解决方案

百钱买百鸡

热度:126   发布时间:2008-01-08 20:02:30.0
百钱买百鸡
一只公鸡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);
     }
}


[[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);
}
----------------解决方案--------------------------------------------------------
  相关解决方案