时间限制: 1 Sec 内存限制: 128 MB
提交: 24 解决: 16
[状态] [提交] [命题人:admin]
题目描述
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
当n=7共14种拆分方法:
7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1+1+3 7=1+1+1+2+2 7=1+1+1+4 7=1+1+2+3 7=1+1+5 7=1+2+2+2 7=1+2+4 7=1+3+3 7=1+6 7=2+2+3 7=2+5 7=3+4 total=14
输入
输入n。
输出
按字典序输出具体的方案。
样例输入 Copy
7
样例输出 Copy
7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1+1+3 7=1+1+1+2+2 7=1+1+1+4 7=1+1+2+3 7=1+1+5 7=1+2+2+2 7=1+2+4 7=1+3+3 7=1+6 7=2+2+3 7=2+5 7=3+4
来源/分类
#include<iostream> #include<vector> using namespace std; vector<int>vec; int n; void dfs(int k) { if(k==0) { if(vec.size()!=1) { cout<<n<<"="; for(int i=0;i<vec.size();i++) { cout<<vec[i]; if(i!=vec.size()-1) { cout<<"+"; } } cout<<endl; return; } } int pre; if(vec.empty()) pre=1; else pre=vec.back(); for(int i=pre;i<=k;i++) { vec.push_back(i); dfs(k-i); vec.pop_back(); } } int main() { cin>>n; dfs(n); return 0; }