文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。
有好几个同学要,我看也是比较重要的代码,就先贴出来好了。
描述 Description
给你一个N*K的棋盘,每步规定只能向右走或者向上走,请问从左下到右上有多少种走法。
输入格式 Input Format
多组测试数据,每组测试数据占一行,每行有两个整数N,K,用空格分隔。其中0<=N,K<=4294967295。
当N=K=0时,表示数据结束,不用处理这组数据。
输出格式 Output Format
每组数据输出一行,为对应的走法总数。
注意结果不会超过4294967295。
Tips:简单的组合问题,不管怎么走都是向右走N步,向上走K步。我主要是写一下组合数函数的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <stdio.h> double cnk(double n,double k){ double i,c=1; /* c(n,k)=c(n,n-k) */ if (k>n-k) k=n-k; /* c(n,k)=n*(n-1)*...*(n-k+1) / k*(k-1)*...*1 */ for(i=n;i>n-k;i--) c*=i/(i-n+k); return c; } int main(){ double n,k; while(1){ scanf("%lf%lf",&n,&k); if(n+k==0) break; printf("%.0lf\n",cnk(n+k,k)); } return 0; } |
转载请注明:Slyar Home » 格子里的路 C语言版