首页 > 编程相关 > 格子里的路 C语言版

格子里的路 C语言版

2008年12月3日 17:51 Slyar 发表评论 阅读评论

文章作者: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;
}
分类: 编程相关 标签:
  1. 2008年12月9日14:22 | #1

    专业的沙发

bnuep:0801010047