CCF NOI1063 计算组合数

问题链接CCF NOI1063 计算组合数




时间限制: 1000 ms  空间限制: 262144 KB

题目描述 

  给出两个非负整数n和m,编写程序计算组合数C(n,m)的值。

输入

  一行两个空格隔开的非负整数n,m。

输出

  输出一个数表示C(n,m)。

样例输入

5 2
样例输出

10

数据范围限制

  0<n<=20,0<=m<=n。




问题分析

  这是一个简单的数学计算问题,需要知道组合函数的计算公式

  输入的数不保证m和n的大小,程序中需要注意,编写相应的逻辑应对。

程序说明

  输入的n和m不大,使用类型unsigned long long即可。

  使用类型定义后,提交时需要选C++,否则程序错误。那个C语言编译器似乎不支持类型定义!郁闷啊!

要点详解

  • 尽量用函数封装功能函数
  • 使用类型定义可以使得代码更加简洁。



参考链接:(略)。

100分通过的C语言程序:

#include <stdio.h>

typedef unsigned long long ULL;

ULL c(int n, int m)
{
    ULL ans = 1;

    if(m <= n-m)
        m = n - m;
    for(int i=m+1; i<=n; i++)
        ans *= i;
    for(int i=1; i<=n-m; i++)
        ans /= i;

    return ans;
}

int main(void)
{
    int n, m;

    scanf("%d%d", &n, &m);

    printf("%lld
", c(n, m));

    return 0;
}



原文地址:https://www.cnblogs.com/tigerisland/p/7563885.html