百钱买百鸡问题
题目:用100文钱买来100只鸡,公鸡5文钱一只,母鸡3文钱一只,小鸡1文钱3只。问:在这100只鸡中,公鸡、母鸡、小鸡各是多少只?
为安陆等地区用户提供了全套网页设计制作服务,及安陆网站建设行业解决方案。主营业务为成都网站建设、网站制作、安陆网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
按照传统的解法,我们可以这么做:
static void Main(string[] args) { for (int x = 0; x <= 100 / 5; x++) { for (int y = 0; y <= 100 / 3; y++) { for (int z = 0; z <= 100; z++) { if ((5 * x + 3 * y + z / 3 == 100) && (x + y + z == 100) && (z % 3 == 0)) { Console.WriteLine("x:" + x + " y:" + y + " z:" + z); break; } } } } }
那如果我们用linq的写法,可以这么写:
static void Main(string[] args) { var query = from 公鸡 in Enumerable.Range(0, 20) let m1 = 100 - 公鸡 * 5 from 母鸡 in Enumerable.Range(0, m1 / 3) where 公鸡 + 母鸡 <= 100 let m2 = m1 - 母鸡 * 3 where m2 >= 0 let 小鸡 = m2 * 3 where 公鸡 + 母鸡 + 小鸡 == 100 select new { 公鸡, 母鸡, 小鸡 }; int cn = 0; foreach (var x in query) Console.WriteLine("方案{0}: 公鸡={1},母鸡={2},小鸡={3}", ++cn, x.公鸡, x.母鸡, x.小鸡); Console.ReadKey(); }
两种解法,读者自行体会。
答案:
方案1: 公鸡=0,母鸡=25,小鸡=75
方案2: 公鸡=4,母鸡=18,小鸡=78
方案3: 公鸡=8,母鸡=11,小鸡=81
方案4: 公鸡=12,母鸡=4,小鸡=84
当前名称:百钱买百鸡问题
当前网址:http://scgulin.cn/article/ihcoho.html