Anzahl Mitspieler n | Kombinationen n! | Kollisionen c | Verhältnis x |
---|---|---|---|
1 | 1 | 1 | 1.0 |
2 | 2 | 1 | 0.5 |
3 | 6 | 4 | 0.6666667 |
4 | 24 | 15 | 0.625 |
5 | 120 | 76 | 0.6333333 |
6 | 720 | 455 | 0.6319444 |
7 | 5040 | 3186 | 0.63214284 |
8 | 40320 | 25487 | 0.63211805 |
9 | 362880 | 229384 | 0.6321208 |
10 | 3628800 | 2293839 | 0.63212055 |
11 | 39916800 | 25232230 | 0.63212055 |
12 | 479001600 | 302786759 | 0.63212055 |
13 | 6227020800 | 3936227868 | 0.63212055 |
package wichtel; /** * * @author Rolf */ public class Wichtel { static boolean inUse[] = null; // is the number i in use? static int set[] = null; // set at pos [] the number static long cnt = 0; // cnt for possible combinations static long collCnt = 0; // cnt collisions static boolean verbose = false; // more debug static int maxLvl = 0; // how many player static public void usage() { System.out.println("missing arguments"); System.exit(1); } static int get(int i) { if (inUse[i] == false) { return i; } return -1; } static boolean collision() { for (int i = 0; i < maxLvl; i++) { if (i == set[i]) { collCnt++; return true; } } return false; } static void display() { boolean isColl = collision(); ++cnt; if (verbose) { System.out.print(cnt + "\t"); for (int i = 0; i < maxLvl; i++) { System.out.print(set[i] + " "); } System.out.println(isColl); } } static void doit(int lvl) { if (lvl == maxLvl) { display(); } else { for (int i = 0; i < maxLvl; i++) { int n = get(i); if (n >= 0) { inUse[i] = true; set[lvl] = n; doit(lvl + 1); inUse[i] = false; } } } } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 1) { usage(); } int toMaxLvl = new Integer(args[0]); inUse = new boolean[toMaxLvl]; set = new int[toMaxLvl]; for (int m = 1; m < toMaxLvl; m++) { maxLvl = m; cnt=0; // reset cnt collCnt=0; for (int i = 0; i < toMaxLvl; i++) { // initialize inUse[i] = false; } doit(0); // report summary float r= (float) collCnt / (float) cnt; System.out.println("Final summary\t" + maxLvl + "\t" + cnt + "\t" + collCnt + "\t"+r); } } }