分桃子问题的算法
问题:有一堆桃子,分给三组人。只分给第一组每人7个,只分给第二组 每人8个,只分给第三组每人9个。一共多少桃子?每组几个人?
我的算法太慢了,有什么好的算法?
- C/C++ code
#include <iostream>using namespace std;int main(){ int n,x,y,z; for(x=1;x<100;x++) for(y=1;y<100;y++) for(z=1;z<100;z++) for(n=1;n<1000;n++) if((n == x*7)&&(n == y*8)&&(n == z*9)) { cout << x<< endl; cout << y<< endl; cout << z<< endl; cout << n<< endl; } return 0;}[解决办法]
哦。是我想简单了,没考虑周全。有2种解决办法:
1、思路简单点,还是用回蛮力搜索,不过代码要改改,参考这样写:
for(n=1; n<INT_MAX; n++)
if(n%7==0 && n%8==0 && n%9==0)
{
cout<<n/7<<endl;
cout<<n/8<<endl;
cout<<n/9<<endl;
cout<<n<<endl;
}
运算符 "%" 用于整型数值运算表示 求余,如果余数为零意味着整除。
2、仍求最小公倍数,相信大部分情形比蛮力搜索要快。简单的算法有用辗转相除法求最大公约数来间接求最小公倍数的。
[解决办法]
桃子数7*8*9*n,n为自然数
第一组人数8*9*n,第二组人数7*9*n,第三组人数7*8*n
[解决办法]
四楼的意思是桃子数是7*8*9的整数倍,第一组的人数是8*9的整数倍,第二组的人数是7*9的整数倍,第三组的人数是7*8的整数倍,这样就能很明了的看出每组有多少人了。