/*
print all compositions of a number in odd parts, i.e. for n = 8:
7 + 1
5 + 3
5 + 1 + 1 + 1
3 + 3 + 1 + 1
3 + 1 + 1 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
*/
#include <iostream>
#include <vector>
int primes[] = {7, 5, 3, 1};
const int N = 4;
void printVector(std::vector<int> v)
{
for(std::vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
std::cout << *it << " ";
}
std::cout << std::endl;
};
void partition(std::vector<int> v, int sum, int idx)
{
if(sum == 0)
{
printVector(v);
}
for(int i = idx; i < N; i++)
{
if(sum >= primes[i])
{
v.push_back(primes[i]);
partition(v, sum - primes[i], i);
v.pop_back();
}
}
};
int main()
{
std::vector<int> v;
partition(v, 8, 0);
return 0;
}微软面试题 07022012 [2]
最新推荐文章于 2025-12-16 01:10:38 发布
本文展示了如何使用C++打印一个整数的所有奇数部分组合方式,包括从最大奇数到最小奇数的所有可能组合。
528

被折叠的 条评论
为什么被折叠?



