难点:分号的打印 7-17 整数分解为若干项之和 (10 分) #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstring> using namespace std; typedef long long ll; const int N = 35; int n, tt, q[N], cnt; void dfs(int x) { if (x < 0) return; if (x == 0) { cnt ++; if (cnt != 1) cout << ";"; printf("%d=", n); for (int i=1; i<tt; i++){ cout << q[i] << "+"; } cout << q[tt]; if (cnt == 4) { cout << endl; cnt = 0; } return; } for (int i=q[tt]; i<=x/2; i++) { q[++tt] = i; dfs(x - i); tt--; } // 不拆分 q[++tt] = x; dfs(0); tt--; } int main() { cin >> n; q[0] = 1, tt = 0; dfs(n); return 0; }