通過 : 81 人 /93 次 | 送出 : 83 人 /149 次 | 通過比率 : 98%
公開 測資點 1 (100%): 1.0s, 512 MB | 評分方式: Tolerant
最近更新 : 2013-02-19 17:02
公開 測資點 1 (100%): 1.0s, 512 MB | 評分方式: Tolerant
最近更新 : 2013-02-19 17:02
內容 :
從 n 個物品取 m 個的組合是一個在數學及企業中常用的值。本題的程式要讀入 n 和 m 的值,輸出從 n 個物品中取出 m 個的不同組合有幾種。它的計算方式為 n 階乘除以 m 階乘再除以 (n - m) 的階乘。n 階乘則是 n 乘以 n - 1,再乘以 n - 2,以此類推,直到最後乘以 1。n 階乘也可以寫成 n!。因此,5 階乘 (5!) 的計算方式為:5 × (5-1) × (5-2) × (5-3) × (5-4) = 5 × 4 × 3 × 2 × 1 = 120。同理 3! 的計算為 3 × (3-1) × (3-2) = 3 × 2 × 1 = 6。而 (5 - 3)!,也就是 2! 的計算為 2 × (2-1) = 2 × 1 = 2。因此,從 5 個物品中取 3 個的不同組合數便為:
n! / [m! x (n – m)!]
= 5! / [3! x (5 – 3)!]
= 120 / [6 x2]
= 120 / 12
= 10
你的程式必須能處理任何 n 和 m 的值。你必須以整數輸出結果。你不需擔心整數溢位。所有的輸入從 stdin 讀取。輸入的 n 和 m 以空格分開、以換行結束。
n! / [m! x (n – m)!]
= 5! / [3! x (5 – 3)!]
= 120 / [6 x2]
= 120 / 12
= 10
你的程式必須能處理任何 n 和 m 的值。你必須以整數輸出結果。你不需擔心整數溢位。所有的輸入從 stdin 讀取。輸入的 n 和 m 以空格分開、以換行結束。
輸入說明 :
輸出說明 :
範例輸入 :
10 5
範例輸出 :
252
提示 :
出處 :
(管理:snail)
---------------------------------------------------------------------------------------------------------#include<stdio.h>
int main(){
int n,m,i,ans;
while(scanf("%d%d",&n,&m)!=EOF){
ans=1;
for(i=0;i<m;i++)
ans*=n-i;
for(i=0;i<m;i++)
ans/=i+1;
printf("%d\n",ans);
}
}
沒有留言:
張貼留言