0507:Square
整数nの分割を辞書順に出力する問題。
nを現在並べられるブロックの個数、
mを直前に並べたブロックの個数として
再帰関数を書いた。
#include<iostream> #include<vector> #include<algorithm> using namespace std; void func(int n, int m, vector<int>res){ if(n==0){ for(int i=0;i<res.size();i++){ cout << res[i]; if(i==res.size()-1)cout << endl; else cout << " "; } return; } for(int i=0;i<m;i++){ if(m-i>n)continue; res.push_back(m-i); func(n-m+i,m-i,res); res.pop_back(); } } int main(void){ int n; vector<int>res; while(cin >> n,n) func(n,n,res); return 0; }