xie【题目描述】
任何一个大于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。
【输出】
按字典序输出具体的方案。
【输入样例】
7
【输出样例】
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
献上 AC 题解 :
#include <queue>
#include <math.h>
#include <stack>
#include <vector>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <iomanip>
#include <string.h>
#include<cstring>
#include <algorithm>
#define nk newk
#define LL long long
const int N=1e2+10;
const int INF = 0x3f3f3f3f;
using namespace std;
int n,a[N]={1},ans;
void dfs(int m,int sum){
for(int i=a[sum-1];i<=m;i++)
{
if(i<n){
a[sum]=i;
m-=i;
if(m==0){
printf("%d=",n);
for(int i=1;i<=sum-1;i++)
printf("%d+",a[i]);
printf("%d\n",a[sum]);
ans++;
}else
dfs(m,sum+1);
m+=i;
}
}
}
int main(){
cin>>n;
dfs(n,1);
return 0;
}