/* 把I 分成 j份, 有多少种分法? 重要概念 : f(I,j) 表示 把 I 分成 j 份的分法。 分成两类: (1)有 1 的分法 (2)没有1 的分法 1 )没有1 分法: 先从I 中拿出j 分成j份,即j份中,已经有了1. 然后再把剩余的I - j 分成 j 份,这样所有份中都 >= 2 2 ) 有 1 分法: 先j 份中,拿出一份,用于放 1 。剩余I -1 ,分到 j -1 份中。 所以: 根据以上分析and解释,得出 f( I,j ) = f( I-j, j) + f( I-1, j-1) */ /* #include <iostream> using namespace std; float f(int i, int j) { float count =0; if (i <= j) { return 1; } else { count = f( i-j, j) + f(i-1, j-1); return count; } } void main() { int i =3; int j =2; cout<<"please input i : "; // cin>>i; cout<<"please input j : "; // cin>>j; float count =0; count = f(i,j); cout<<"f(i,j) = "<<count<<endl; } */ #include <stdio.h> int main(){ int n, k, i, j, f[201][101]={0}; scanf("%d%d",&n,&k); f[0][0]=1; for(i=1;i<=n;i++) { for(j=1;j<=k;j++) { if(i>=j) { f[i][j] = f[i-1][j-1] + f[i-j][j]; } else { f[i][j] = f[i-1][j]; } printf("%d",f[n][k]); } } return 0; } 这个程序并没有看懂。中间那个程序,被注释掉了,是我自己写的,不知为何运行出错。 有待进一步研究