1. 程式人生 > >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\n", c(n, m));

    return 0;
}