P2404 自然數的拆分問題(簡單dfs)
阿新 • • 發佈:2019-01-26
題目背景
任何一個大於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<=8
題目解析:簡單dfs。
#include <cstdio> #include <cstring> #include <iostream> using namespace std; int vis[10]; int a[10]; int cnt,counts=0; void dfs(int n,int k,int t)//為了不重複,所以t引數表明當前的因子中最大的數,接下來的數不能小於它 { if(n == cnt) { for(int i = 1; i < k; i++) cout<<a[i]<<"+"; cout<<a[k]<<endl; } //輸出 for(int i = 1 ; i < cnt; i++ ) { if((n + i <= cnt) && i >= t) { a[k+1] = i; k++; dfs(n+i,k,i); k--; } } } int main() { cin>>cnt; dfs(0,0,0); return 0; }