本實例計算使用數字 0-7 能組成多少個不重複數字的奇數(1 到 7 位數)。
k-2 位從剩餘 6 個數字中排列。P(n, r) = n! / (n-r)! 計算。// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鳥教程. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
int factorial(int a, int b); /* 求排列數 P(a,b) */
int main() {
int sum = 0, i;
sum += 4; /* 一位數:1,3,5,7 共 4 個 */
for (i = 2; i < 8; i++)
sum += 4 * (factorial(7, i - 1) - factorial(6, i - 2));
printf("可以組成%d個奇數\n", sum);
return 0;
}
int factorial(int a, int b) {
int i, sum = 1;
if (b <= 0) return 1;
for (i = 0; i < b; i++)
sum *= (a - i);
return sum;
}
可以組成29692個奇數
factorial(7, i-1) 表示從 7 個數字(去掉 0)中取 i-1 個排列(最高位及中間位),factorial(6, i-2) 扣除最高位為 0 的情況。乘以 4 為個位選擇數。