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

百钱买百鸡

热度:230   发布时间:2008-01-24 20:43:40.0
我是这样做的,不知道对不对  
main()
{
int x,j,z,n=0;
for(x=1;x<=20;x++)
  {for(j=1;j<=33;j++)
   {for(z=1;z<=100;z++)
   {
    if((x*5+j*3+z/3)==100&&(x+j+z==100))

   { printf("%d  %d  %d\n",x,j,z); n++;}} }}

printf("%d\n",n);
getch();}
----------------解决方案--------------------------------------------------------
楼上的思路是正确的。不过有些问题?
您程序返回的结果:
3  20  77
4  18  78
7  13  80
8  11  81
11  6  83
12  4  84
6


1、if((x*5+j*3+z/3)==100&&(x+j+z==100))
由于您全部变量都使用了int类型,所以(x*5+j*3+z/3)==100。会出现以下错误:
3*5+20*3+77/3==100 返回的值是真。

2、for(z=1;z<=100-x-j;z++)
小鸡的数量,可以直接用100-公鸡-母鸡得出
这样可以减少程序循环的次数,和增加程序的可读性。

[[italic] 本帖最后由 gdsing 于 2008-1-24 23:10 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
好深奥啊,看来还得继续学习
----------------解决方案--------------------------------------------------------
#include "stdio.h"
      main()
       { int x, y, z,i=0;
     
        for ( x=0;x<=20; x++)
               for(z=0;z<=99;z+=3)
            { y=100-x-z;
              if   (5*x+3*y+z/3)==100
              {printf ( "公鸡=%d ,母鸡=%d ,小鸡=%d\n",x ,y z);i++}
            }
                printf("%d\n",i)
         }
      这样免去类型的问题

[[italic] 本帖最后由 zhaoruiqi1975 于 2008-1-25 11:23 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
z%3==0
----------------解决方案--------------------------------------------------------
14楼这个语句: for(z=0;z<=99;z++=3)
其中z++=3是做什么的,应该是z++吧?
----------------解决方案--------------------------------------------------------
应该是z=z+3
----------------解决方案--------------------------------------------------------
  相关解决方案