程序运行错误 求指点
不知道哪儿出问题了 设 m、n 均为大于 0 的整数,m 可表示为一些不超过 n 的整数之和,f(m,n) 为这种表示方式的数目。
例如,f(5,3)=5,有 5 种表示方法:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。
请编写程序,计算 f(m,n) 的值。
输入:
m n
输出:
f(m,n)的值
程序代码:#include <stdio.h>
#include <stdlib.h>
int second_small(int (*(*p)[50])[50],int x,int y)
{
int i,j;
for(i=y;i>=1;i--)
{if(*(*p+50*x+i-1)>*(*p+50*x+i)) {j=i-1;break;} }
return j;
}
int main()
{int m,n,i,j,x=0,y,z,a[50][50];
scanf("%d %d",&m,&n);
if(m%n!=0)
{for(i=0;i<m/n-1;i++) a[x][i]=n; y=m/n; a[x][y]=m%n; }
else {for(i=0;i<m/n-1;i++) a[x][i]=n; y=m/n-1;}
for(;a[x][0]!=1;)
{
z=second_small(a,x,y);
if(a[x][y]==1)
if(a[x][z]>=3)
{
for(i=0;i<=y;i++) a[x+1][i]=a[x][i]; x=x+1;
a[x][z]=a[x][z]-1;a[x][z+1]=2;
}
else
{
for(i=0;i<=y;i++) a[x+1][i]=a[x][i]; x=x+1;
a[x][z]=1;a[x][y+1]=1;
}
else
if( (a[x][z]-a[x][z+1])>1 )
{
for(i=0;i<=y;i++) a[x+1][i]=a[x][i]; x=x+1;
a[x][z]=a[x][z]-1;a[x][z+1]=a[x][z+1]+1;
}
else
{
for(i=0;i<=y;i++) a[x+1][i]=a[x][i]; x=x+1;
a[x][y]=a[x][y]-1;a[x][y+1]=1;
}
}
printf("%d\n",x+1);
system("PAUSE");
return 0;
}






