洛谷 P2404 自然数的拆分问题
题目背景
任何一个大于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
说明
用回溯做。。。。
n\le 8n≤8
思路:搜索。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n; int bns[10]; void dfs(int sum,int tot,int pre){ if(sum>n) return ; if(sum==n&&tot!=1){ cout<<bns[1]; for(int i=2;i<=tot;i++) printf("+%d",bns[i]); cout<<endl; return ; } for(int i=pre;i<=n;i++){ bns[tot+1]=i; dfs(sum+i,tot+1,i); } } int main(){ scanf("%d",&n); dfs(0,0,1); }
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。