题目背景
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
题目描述
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
输入输出格式
输入格式:
输入:待拆分的自然数n。
输出格式:
输出:若干数的加法式子。
输入输出样例
输入样例#1:
复制
7
输出样例#1:
复制
1+1+1+1+1+1+1 1+1+1+1+1+2 1+1+1+1+3 1+1+1+2+2 1+1+1+4 1+1+2+3 1+1+5 1+2+2+2 1+2+4 1+3+3 1+6 2+2+3 2+5 3+4
解析
搜索模版,简单dfs即可
#include<bits/stdc++.h> using namespace std; int n; vector<int> vn; int sum; int m; void dfs(int now) { if(sum>n) return;//判断不符合条件的边界!! if(sum==n) { int m=vn.size(); for(int i=0;i<m;i++) { if(i==m-1) cout<<vn[i]<<endl; else cout<<vn[i]<<"+"; } return; } for(int i=now;i<n;i++) { sum=sum+i; vn.push_back(i); dfs(i); sum=sum-i; vn.pop_back(); } } int main() { cin>>n; dfs(1); }