题目链接:7-37 整数分解为若干项之和
一. 题目
1. 题目
2. 输入输出格式
3. 输入输出样例
4. 限制
二、代码
1. 代码实现
#include <iostream>
#include <vector>
using namespace std;
// 打印整数分解序列式子的右边内容
void print_combinations(const vector<int> combination) {
for (size_t i = 0; i < combination.size(); ++i) {
cout << combination[i];
if (i < combination.size() - 1) {
cout << "+";
}
}
}
// 查找所有整数分解序列式子
void find_combinations(int target, int current_sum, vector<int>& combination, int start) {
static int print_num = 0;
if (current_sum == target) { // 当前和为N
if (print_num % 4) { // 是否已经打印了4个
cout << ';'; // 式子间用分号隔开
} else if (print_num > 0) {
cout << endl; // 换行
}
cout << target << '='; // 打印左式和等号
print_combinations(combination); // 打印右式
print_num++;
return;
}
// i = start确保整数分解序列的下一个数字不小于上一个
for (int i = start; current_sum + i <= target; i++) {
combination.push_back(i);
find_combinations(target, current_sum + i, combination, i);
combination.pop_back();
}
}
int main() {
int N;
cin >> N;
if (N <= 0 || N > 30) {
cout << "N must be between 1 and 29." << endl;
return -1;
}
vector<int> combination; // 用vector只是为了方便打印
find_combinations(N, 0, combination, 1);
return 0;
}