程序运行错误 求指点
不知道哪儿出问题了 设 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; }