0507-Square

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0507&lang=jp
再帰関数でがんばる。
stringが遅いのか、時間は微妙だった。

#include <cstdio>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int s;
string int2string(int v){
	string res;
	string t;
	if(v==0) return "0";
	while(v>0){
		t='0'+(v%10);
		res=t+res;
		v/=10;
	}
	return res;
}
void putdata(int k,int m,string d){
	if(k==0){
		cout << d << endl;
		return;
	}
	for(int i=min(k,m);i>0;i--){
		if(d==""){
			putdata(k-i,i,int2string(i));
		}else {
			putdata(k-i,i,d+" "+int2string(i));
		}
	}
}
int main() {
	std::ios_base::sync_with_stdio(false);
	int n;
	while(1){
		cin >> n;
		if(n==0)return 0;
		putdata(n,n,"");
	}
}