首页 新闻 会员 周边

一道程序题目,请教

0
悬赏园豆:5 [已解决问题] 解决于 2011-10-21 18:46

题目是这样的:1只公鸡5文钱,1只母鸡3文钱,3只小鸡1文钱,现在有100文钱,要刚好买100只鸡,编写程序输出所有可能情况,公鸡,母鸡,小鸡各多少只?用C语言

MySparrow的主页 MySparrow | 菜鸟二级 | 园豆:263
提问于:2011-10-21 09:53
< >
分享
最佳答案
1

这是个百鸡问题,使用穷举法解决。我在我的博客中正好讲了

http://www.cnblogs.com/wintergrass/archive/2011/03/29/1998317.html

收获园豆:3
COS | 菜鸟二级 |园豆:213 | 2011-10-21 15:39
其他回答(6)
0

public static void main(String[] args) {
   for(int i=0;i<100;i++){
    if(i%3==0){
     for(int j=0;j<(100-i);j++){
      if(i*1/3+j*5+(100-i-j)*3==100){
       System.out.println("雏鸡"+i*1/3+"文买"+i+"只,公鸡"+j*5+"文买"+j+"只,母鸡"+(100-i-j)*3+"文买"+(100-i-j)+"只");
      } 
     }
    }
   }
}

收获园豆:1
鸟儿鸟儿快点飞 | 园豆:217 (菜鸟二级) | 2011-10-21 10:03
0

第二句的for循环写成for(int i=0;i<100;i=i+3)应该更快点,如果你那个,然后在判断,就要一个一个的增加

喬喬AI | 园豆:996 (小虾三级) | 2011-10-21 10:20

i代表母鸡数目。不是钱数。

支持(0) 反对(0) lanse_yan | 园豆:187 (初学一级) | 2011-10-21 14:38

@lanse_yan: 是我看错了,唉,我还以为是用钱来计算呢!

支持(0) 反对(0) 喬喬AI | 园豆:996 (小虾三级) | 2011-10-21 14:44
0

            static void Main(string[] args){

            int n;
            int s=0;
            for (int i = 0;i <= 20; i++ )
            {
                n = (100 - 5 * i) / 3;
                 for (int j = 0; j>=0&&j <= n;j++ ) {
                   int m = (100-5*i-3*j)*3;
                   Console.WriteLine("公鸡数:" + i + " " + "母鸡数:" + j +" " + "小鸡数:" + m);
                   s++;
                 }
             }
             Console.WriteLine("做法的种类数目:" + s);

}

结果是:一共364种做法。

PS:用哪种编程语言并不重要,重要的是你的算法思想,可能我这个算法不是最好的,执行效率估计也不是最高的,希望能够起到抛砖引玉的效果。

收获园豆:1
lanse_yan | 园豆:187 (初学一级) | 2011-10-21 10:48
0

#include<iostream>

using namespace std;

 

void main()
{
 int i,j;
 for( i=0;i<20;++i)
  for( j=0;j<34;++j)
  {
   if(5*i+j*3+(100-i-j)/3.0==100)
    cout<<" 公鸡 "<<i<<" 母鸡  "<<j<<" 小鸡 "<<(100-i-j)<<endl;
  }
}

fishall | 园豆:300 (菜鸟二级) | 2011-10-21 13:24
0

假设公鸡买x只,母鸡买y只,只小鸡是100-x-y只,

由每种鸡的价钱可以得到方程  5x+3y+(1/3)(100-x-y)=100

简化下方程得到7x+4y=100

假如全部买公鸡的话是20只公鸡,也就是说公鸡最多买20只,最少买0只,所以用0到20依次当成x解方程,当y是整数时即表示此方案可以,即可以知道公鸡、母鸡、小鸡的数量。

这是我小学的时候用的方法,是最容易理解的方法。只要想明白了,用什么语言都无所谓,也容易写了。

另一些好点的方法就是楼上各位写的了。

LCM | 园豆:6876 (大侠五级) | 2011-10-21 15:45
1

......这是一个线性代数问题..... 貌似几个公式就能搞定.

 

嗯, 我的计算结果是只有4种个解.

抽象成矩阵:

[15 9 1 ; 1 1 1], 求null, 得[ 4/3 -7/3 1], 另找一个特解[-100 200 0]

则m[4/3 -7/3 1] + [-100 200 0] 为解空间. 

由于题目的特殊性, m必须满足

1. 自然数 

2. 3的倍数 

并且, 每种鸡的数目>=0

问题化简成 75 <= m <= 85, 且m % 3 == 0的问题.

故而, C代码......

glshader | 园豆:118 (初学一级) | 2011-10-21 16:31

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2018-10-30 17:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册