数学排列组合问题
将标号为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; }