关于一个数列输出的问题(要求输出组合中所有行之和一定的数列)

来源:百度知道 编辑:UC知道 时间:2024/09/22 08:31:34
用C++语言解决下面的问题:输入n和m(20>=m>=n>0)求出所有满足以下方程的正整数数列 i1,i2,...,in,使i1+i2+...+in=m,且i1>=i2...>=in。例如:当n=4, m=8时,将得到如下5 个数列:
5 1 1 1
4 2 1 1
3 3 1 1
3 2 2 1
2 2 2 2

你看我这个程序怎样:

main(){
int n,m,i,j,k,s;
int a[20];
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++) a[i]=0;
i=0;
s=0;
while(a[1]<m){
if (i<n) {
if (s+a[i+1]<m) {i++;a[i]++;s+=a[i];}
else {a[i+1]=0;s-=a[i];i--;}
}else{
if (s==m) {
for (j=1;j<=n;j++)printf("%d ",a[j]);printf("\n");s-=a[i];i--;
}
else if (s<m) {s-=a[i];a[i]++;s+=a[i];}
else {i--;s-=a[i];}
}
}
}