#include <stdio.h></p><p>int a[11], In, now;</p><p>void f(int n, int m, int k)<br />{<br />int i, sum=0;<br />if(n==1 || m==1)<br />{<br />for(i=0; i<n; i++)<br />a[k++] = 1;<br />for(i=0; i<k; i++)<br />sum+=a[i];<br />if(a[0] == now-1)<br />{<br />now -= 1;<br />printf("/n");<br />}<br />for(i=0; i<k-1; i++)<br />printf("%d+", a[i]);<br />printf("%d", a[k-1]);<br />if((In-a[0]+1)!=k)<br />printf(",");<br />return;<br />}<br />else if(n<m)<br />{<br />f(n ,n, k);<br />}<br />else if(n==m)<br />{<br />a[k] = n;<br />for(i=0; i<=k; i++)<br />sum+=a[i];<br />if(sum==In)<br />{<br />if(a[0] == now-1)<br />{<br />now -= 1;<br />printf("/n");<br />}<br />for(i=0; i<k; i++)<br />printf("%d+", a[i]);<br />printf("%d", a[k]);<br />if((In-a[0])!=k)<br />printf(",");<br />}<br />f(n, n-1, k);<br />}<br />else<br />{<br />a[k] = m;<br />f(n-m, m, k+1);<br />f(n, m-1, k);<br />}<br />}</p><p>void main()<br />{<br />while(scanf("%d",&In))<br />{<br />now = In;<br />f(In,In, 0);<br />printf("/n");<br />}<br />}<br />
部分結果:
6<br />6<br />5+1<br />4+2,4+1+1<br />3+3,3+2+1,3+1+1+1<br />2+2+2,2+2+1+1,2+1+1+1+1<br />1+1+1+1+1+1<br />7<br />7<br />6+1<br />5+2,5+1+1<br />4+3,4+2+1,4+1+1+1<br />3+3+1,3+2+2,3+2+1+1,3+1+1+1+1<br />2+2+2+1,2+2+1+1+1,2+1+1+1+1+1<br />1+1+1+1+1+1+1<br />8<br />8<br />7+1<br />6+2,6+1+1<br />5+3,5+2+1,5+1+1+1<br />4+4,4+3+1,4+2+2,4+2+1+1,4+1+1+1+1<br />3+3+2,3+3+1+1,3+2+2+1,3+2+1+1+1,3+1+1+1+1+1<br />2+2+2+2,2+2+2+1+1,2+2+1+1+1+1,2+1+1+1+1+1+1<br />1+1+1+1+1+1+1+1<br />9<br />9<br />8+1<br />7+2,7+1+1<br />6+3,6+2+1,6+1+1+1<br />5+4,5+3+1,5+2+2,5+2+1+1,5+1+1+1+1<br />4+4+1,4+3+2,4+3+1+1,4+2+2+1,4+2+1+1+1,4+1+1+1+1+1<br />3+3+3,3+3+2+1,3+3+1+1+1,3+2+2+2,3+2+2+1+1,3+2+1+1+1+1,3+1+1+1+1+1+1<br />2+2+2+2+1,2+2+2+1+1+1,2+2+1+1+1+1+1,2+1+1+1+1+1+1+1<br />1+1+1+1+1+1+1+1+1<br />