数学排列组合问题
将标号为1.2.3.4.5.6的6张卡片放入3个不同的信封,若每个信封放2张,有多少种放法先给出数学解法,再给出程序(^o^)
程序代码:#include <stdio.h>
int c(int n, int m) {
int i, r = 1;
for (i = n; i > n - m; r *= i--);
for (i = m; i > 1; r /= i--);
return r;
}
int main() {
printf("%d\n", c(6, 2) * c(4, 2));
return 0;
}
程序代码:#include <stdio.h>
int main() {
char e[3] = {0}, c[6] = {0}, i, cnt = 0;
for (c[0] = 0; c[0] < 3; c[0]++) {
if (e[c[0]] < 2) {
e[c[0]]++;
for (c[1] = 0; c[1] < 3; c[1]++) {
if (e[c[1]] < 2) {
e[c[1]]++;
for (c[2] = 0; c[2] < 3; c[2]++) {
if (e[c[2]] < 2) {
e[c[2]]++;
for (c[3] = 0; c[3] < 3; c[3]++) {
if (e[c[3]] < 2) {
e[c[3]]++;
for (c[4] = 0; c[4] < 3; c[4]++) {
if (e[c[4]] < 2) {
e[c[4]]++;
for (c[5] = 0; c[5] < 3; c[5]++) {
if (e[c[5]] < 2) {
for (i = 0; i < 6; i++) {
if (c[i] == 0) {
printf("%d ", i);
}
}
printf("| ");
for (i = 0; i < 6; i++) {
if (c[i] == 1) {
printf("%d ", i);
}
}
printf("| ");
for (i = 0; i < 6; i++) {
if (c[i] == 2) {
printf("%d ", i);
}
}
printf("\n");
cnt++;
}
}
e[c[4]]--;
}
}
e[c[3]]--;
}
}
e[c[2]]--;
}
}
e[c[1]]--;
}
}
e[c[0]]--;
}
}
printf("%d\n", cnt);
return 0;
}