#include #include #define min(x, y) ((x) > (y)? (y) : (x)) #define max(x, y) ((x) > (y)? (x) : (y)) double success(int a, int b, int c, int taw) { if(taw <= 0) { if(a + taw <= 0 || b + taw <= 0 || c + taw <= 0) {return 0;} return (double)((a + taw) * (b + taw) * (c + taw)) / 8000; } else { double prob = 0; int i; for(i = 0; i <= min(taw, 20 - a); i++) { int j; for(j = 0; j <= min(taw - i, 20 - b); j++) { int k; for(k = 0; k <= min(taw - i - j, 20 - c); k++) { prob += (double) ((i? 1 : a) * (j? 1 : b) * (k? 1 : c)) / 8000; } } } return prob; } } int main(int argc, char **argv) { if(argc == 1) { int a; for(a = 1; a <= 20; a++) { int b; for(b = 1; b <= a; b++) { int c; for(c = 1; c <= b; c++) { printf("%2d;%2d;%2d", c, b, a); int taw; for(taw = -10; taw <= 20; taw++) { printf(";%f", success(a, b, c, taw)); } puts(""); } } } } else if(argc == 5) { int a, b, c, taw; sscanf(argv[1], "%d", &a); sscanf(argv[2], "%d", &b); sscanf(argv[3], "%d", &c); sscanf(argv[4], "%d", &taw); printf("%2d - %2d - %2d - TaW %2d: %8.4f%%\n", a, b, c, taw, success(a, b, c, taw) * 100); } exit(0); }