注册 登录
编程论坛 C++教室

很简单的题目:求百钱买百鸡

狂人老大 发布于 2007-08-08 21:05, 3396 次点击
公鸡7元一只,母鸡5元一只,小鸡一元3只。
要求100元钱买100只鸡
程序提示没有错误
但是就是编译的时候没有结果出来
是不是效率太低 要继续等结果的啊
#include<iostream>
using namespace std;
int main(){
for(int i(1);i<=13;i++)
for(int j(1);i<=18;j++) //百钱买百鸡的问题
for(int k(1);k<=98;k++)
{
if(7*i+5*j+k/3-100)
continue;
if(i+j+k-100)
continue;
if(k%3)
continue;
cout<<"cock:"<<i<<endl;
cout<<"hen:"<<j<<endl;
cout<<"chick:"<<k<<endl;
}
}
10 回复
#2
狂人老大2007-08-08 21:12
我知道了
#include<iostream>
using namespace std;
int main(){
for(int i(1);i<=13;i++)
for(int j(1);i<=18;j++) //百钱买百鸡的问题
for(int k(1);k<=98;k++)
{
if(7*i+5*j+k/3-100)
continue;
if(i+j+k-100)
continue;
if(k%3)
continue;
cout<<"cock:"<<i<<endl;
cout<<"hen:"<<j<<endl;
cout<<"chick:"<<k<<endl;
}
}弄错了
#3
野比2007-08-08 21:12
#4
狂人老大2007-08-08 21:14
唉 太粗心了
复制了没有仔细看就编译了
#5
aipb20072007-08-08 21:50
to : 狂人老大

你的方法效率确实不高,我想应该可以有其他的思路解这个经典题目。

即使按你的思路,也可以改进使你的算法由O(n^3) ---> O(n^2)

[CODE] int i,j,k;
for (i = 0;i < 14;++i)
for (j = 0;j < 21;++j){
k = 100 - i - j;
if (k%3 == 0 && 7*i + 5*j + k/3 == 100)
cout << "cock\t" << i
<< "\nhen\t" << j
<< "\nchick\t" << k
<< endl;
}[/CODE]

就一点点改变。
#6
狂人老大2007-08-08 21:53
恩 是比我的好点
谢谢了
#7
福尔摩斯2007-08-09 01:17
最简单的方法是用线性代数的知识

#8
HJin2007-08-09 02:54
回复:(狂人老大)很简单的题目:求百钱买百鸡

Suppose that we buy x cocks, y hens, and z chickens.

Then

7*x+5*y+z/3=100
x+y+z=100

Eliminating z, we get

10*x + 7*y = 100,

of which (10, 0) is a solution. Then since all solutions
are in the form (10-7*k, 0+10*k), we know there is at most
one extra solution

(10-7*1, 0+10*1) = (3, 10).

Finally, we need to check if (10, 0) and (3, 10) really
gives a solution to the original problem.

#9
狂人老大2007-08-09 10:10
以下是引用福尔摩斯在2007-8-9 1:17:04的发言:
最简单的方法是用线性代数的知识

线性代数??
怎么弄??

#10
aipb20072007-08-09 11:37

这个问题,基本上普遍解法是基于穷举的,8楼hjin的也一样。

猴子的线形代数解,还真想看看!呵呵~

#11
armmer2007-08-09 16:33

学习了

1