m******a 发帖数: 84 | 1 问一道题,好像是L家的一题,将一个数N表示成一串整数的乘积,要求输出所有可能的
方式,并且去重,并由小到大排序,如N=24,则加过是 1*24, 2*2*2*3, 2*3*4, 3*8 .
.... 这个题就是先分解质因数,后面如何找到左右的由小到大的组合呢? | r****7 发帖数: 2282 | 2 这种题你要想的太细就没法做了
不用分解质因数,直接dfs,遇到能整除的把整除之后的结果继续递归,不过要排序去
重,所以要把当前的被除数带入到递归中,然后下一层递归的被除数要大于等于这个传
入的数
.
【在 m******a 的大作中提到】 : 问一道题,好像是L家的一题,将一个数N表示成一串整数的乘积,要求输出所有可能的 : 方式,并且去重,并由小到大排序,如N=24,则加过是 1*24, 2*2*2*3, 2*3*4, 3*8 . : .... 这个题就是先分解质因数,后面如何找到左右的由小到大的组合呢?
| m*****k 发帖数: 731 | | T******e 发帖数: 157 | 4 大概写一个试试,感觉1和数本身的情况要另外考虑
void divide(vector >& factors, vector& factor, int start,
int remain){
if (remain == 1) {
factors.push_back(factor);
return;
}
for (int i = start; i <= remain; i++) {
if (remain%i == 0) {
factor.push_back(i);
divide(factors, factor, i, remain/i);
factor.pop_back();
}
}
} | h**6 发帖数: 4160 | |
|