m*******i 发帖数: 370 | 1 A man has 3 kids. The product of the ages of the three kids is 36. How will
you systematically list out all of the possible combination for the ages of
the 3 kids without repetition?
这个在loop里面怎么remove其中的repetition呢? | p*****e 发帖数: 1611 | 2 for (int i = 1;i <=36; i++)
for (int j = i; j <=36; j++)
for (k = j; k <= 36; k++)
大致这个框架,中间可以优化的。
will
of
【在 m*******i 的大作中提到】 : A man has 3 kids. The product of the ages of the three kids is 36. How will : you systematically list out all of the possible combination for the ages of : the 3 kids without repetition? : 这个在loop里面怎么remove其中的repetition呢?
| p*****e 发帖数: 1611 | 3 或者两重循环,求第三个,然后判断要>=j
写法挺多的,关键是要排序搜
【在 p*****e 的大作中提到】 : for (int i = 1;i <=36; i++) : for (int j = i; j <=36; j++) : for (k = j; k <= 36; k++) : 大致这个框架,中间可以优化的。 : : will : of
| m*******i 发帖数: 370 | 4 这样,很多repetion, 比如 1 9 4 和 4 9 1
【在 p*****e 的大作中提到】 : for (int i = 1;i <=36; i++) : for (int j = i; j <=36; j++) : for (k = j; k <= 36; k++) : 大致这个框架,中间可以优化的。 : : will : of
| p*****e 发帖数: 1611 | 5 不会,k一定要比j大
【在 m*******i 的大作中提到】 : 这样,很多repetion, 比如 1 9 4 和 4 9 1
| s******t 发帖数: 2374 | 6 可以因式分解么?
我刚才的帖子没看懂题目。我删掉了 | s******t 发帖数: 2374 | 7 36 ==
2 2 3 3 然后可以组合来组合去的
1可以作为特殊情况考虑,还可以有两个1 | p*****e 发帖数: 1611 | 8 这题可以扩展成n个孩子的乘积是m
写个递归就可以,同样注意要排序搜
【在 s******t 的大作中提到】 : 36 == : 2 2 3 3 然后可以组合来组合去的 : 1可以作为特殊情况考虑,还可以有两个1
| m*******i 发帖数: 370 | 9 我理解错了,多谢!
【在 p*****e 的大作中提到】 : 不会,k一定要比j大
| c*******d 发帖数: 255 | 10 36 = 2^2*3^2
两个2分给三个人,有C(4,2)种分法
C(4,2)*C(4,2) = 36种情况
所以程序可以这么写:
#include
#include
using namespace std;
int main()
{
unsigned int k1, k2, k3, s1, s2, s3, n1, n2, n3;
unsigned int count = 0;
unsigned int i, j, p, q;
for(i=1;i<=4;i++) {
for(j=i+1;j<=4; j++) {
k1 = i-1;
k2 = j-(i+1);
k3 = 4-j;
for(p=1; p<=4; p++) {
for(q=p+1; q<=4; q++) {
s1 = p-1;
s2 = q-(p+1);
s3 = 4-q;
n1 = pow(2,k1)*pow(3,s1
【在 m*******i 的大作中提到】 : A man has 3 kids. The product of the ages of the three kids is 36. How will : you systematically list out all of the possible combination for the ages of : the 3 kids without repetition? : 这个在loop里面怎么remove其中的repetition呢?
| c*******d 发帖数: 255 | 11 这个解法是假定给了这家三个小孩的名字,然后猜每个名字对应的年龄是多少
如果问题是“列出这家三个小孩,老大,老二,老三年龄分别是多少?”
则上述解法有很多重复。我一下还没想到怎样去除其中的重复。
【在 c*******d 的大作中提到】 : 36 = 2^2*3^2 : 两个2分给三个人,有C(4,2)种分法 : C(4,2)*C(4,2) = 36种情况 : 所以程序可以这么写: : #include : #include : using namespace std; : int main() : { : unsigned int k1, k2, k3, s1, s2, s3, n1, n2, n3;
| s******t 发帖数: 2374 | 12 我知道为啥。我看晕了。
【在 c*******d 的大作中提到】 : 36 = 2^2*3^2 : 两个2分给三个人,有C(4,2)种分法 : C(4,2)*C(4,2) = 36种情况 : 所以程序可以这么写: : #include : #include : using namespace std; : int main() : { : unsigned int k1, k2, k3, s1, s2, s3, n1, n2, n3;
|
|