主题:百鸡问题的疑惑
predict
[专家分:0] 发布于 2010-06-23 17:25:00
公鸡每只值5 文钱,母鸡每只值3 文钱,而3 只小鸡值1 文钱。现在用100 文钱买100 只鸡,问:这100 只鸡中,公鸡、母鸡和小鸡各有多少只?
通过网上查找资料得出结果为
0,25,75
4,18,78
8,11,81
12,4,84
我的疑惑就是为什么19,1,6不行呢?
回复列表 (共9个回复)
沙发
bruceteen [专家分:42660] 发布于 2010-06-23 19:09:00
19,1,6 加起来等于100吗?
板凳
alweeq86 [专家分:1170] 发布于 2010-06-23 19:27:00
这样的题我记得小时候爸爸经常出给我做
3 楼
alweeq86 [专家分:1170] 发布于 2010-06-23 19:40:00
[code=c]
int main()
{
//5x+3y+z=100 x:公鸡数 y:母鸡数 z:小鸡数
for(int x=0; x<=100/5; x++)
for(int y=0; y<=(100-5*x)/3; y++)
{
int z=100-5*x-3*y;
if(z>=0)
std::cout<<"公鸡数:"<<x<<std::endl
<<"母鸡数:"<<y<<std::endl
<<"小鸡数:"<<z<<std::endl
<<std::endl;
}
return 0;
}[/code]
4 楼
雪光风剑 [专家分:27190] 发布于 2010-06-23 19:55:00
alw同学的代码无疑不太正确,得不到正确的解,因为原题的两个约束是:
x+y+z=100
5x+3y+z/3=100
有人化简过这个约束,把代码改成单循环了,一样可以出正确结果的,而且时间代价更低,呵呵
5 楼
bruceteen [专家分:42660] 发布于 2010-06-23 20:28:00
[quote]alw同学的代码无疑不太正确,得不到正确的解,因为原题的两个约束是:
x+y+z=100
5x+3y+z/3=100
有人化简过这个约束,把代码改成单循环了,一样可以出正确结果的,而且时间代价更低,呵呵[/quote]
化简后为 7x+4y=100
其实就能看出 x 只能取 0, 4, 8, 12
(如果看不出的话,可以变形为 7/4*x = 25-y,因为y为整数,所以25-y为整数,所以x必须是4的倍数)
for( unsigned x=0; x<=100/7; x+=4 )
{
y是 (100-7×x) / 4
z是 100 - x - y
输出 x,y,z
}
6 楼
alweeq86 [专家分:1170] 发布于 2010-06-23 21:18:00
太失败了 没看清题 这会丢大了 不好意思
7 楼
predict [专家分:0] 发布于 2010-06-23 23:22:00
19*5+1*3+6*1/3=100
没错呀
8 楼
雪光风剑 [专家分:27190] 发布于 2010-06-23 23:35:00
[quote]
19*5+1*3+6*1/3=100
没错呀[/quote]
问题在于百钱要买的是“百鸡”
19+1+6=26吧……跟100差得还是比较远的
9 楼
predict [专家分:0] 发布于 2010-06-24 09:28:00
了解了。。谢谢
我来回复