#include #include main(int argc, char **argv) { int min, max, x[7], s[7] = { 4, 6, 8, 10, 12, 20, 1 }, testmin, testmax, output, i; if (argc != 2) { fprintf(stderr, "usage: %s \n", argv[0]); exit(1); } if (sscanf(argv[1], "%d-%d", &min, &max) != 2) { fprintf(stderr, "error: malformed range: expecting 'x-y'\n"); exit(1); } for (x[0] = 0; x[0] <= min; ++x[0]) for (x[1] = 0; x[1] <= min; ++x[1]) for (x[2] = 0; x[2] <= min; ++x[2]) for (x[3] = 0; x[3] <= min; ++x[3]) for (x[4] = 0; x[4] <= min; ++x[4]) { x[5] = -(11*x[4] + 9*x[3] + 7*x[2] + 5*x[1] + 3*x[0] + min - max) / 19; x[6] = -(8*x[4] + 10*x[3] + 12*x[2] + 14*x[1] + 16*x[0] - 20 * min + max) / 19; if (x[5] < 0 || x[6] < 0) continue; testmin = x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6]; testmax = 4*x[0] + 6*x[1] + 8*x[2] + 10*x[3] + 12*x[4] + 20*x[5] + x[6]; if (testmin == min && testmax == max) { for (output = 0, i = 0; i < 7; ++i) { if (x[i] > 0) { if (output++) printf(" + "); printf(s[i] == 1 ? "%d" : "%dd%d", x[i], s[i]); } } printf("\n"); } } }