Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- static double
- evalop(int op, double x, double y)
- {
- switch (op) {
- case 0:
- return x + y;
- case 1:
- return x - y;
- case 2:
- return x * y;
- case 3:
- return x / y;
- }
- abort();
- return 0.0;
- }
- static void
- enum_expr(double *val, int al, int ar, int bl, int br, int cl, int cr)
- {
- int o1, o2, o3;
- static char *opname[4] = { "+", "-", "*", "/" };
- for (o1 = 0; o1 < 4; o1 ++) {
- for (o2 = 0; o2 < 4; o2 ++) {
- for (o3 = 0; o3 < 4; o3 ++) {
- double tmp[7];
- memcpy(tmp, val, 4 * sizeof(double));
- tmp[4] = evalop(o1, tmp[al], tmp[ar]);
- tmp[5] = evalop(o2, tmp[bl], tmp[br]);
- tmp[6] = evalop(o3, tmp[cl], tmp[cr]);
- if (fabs(tmp[6] - 21.0) < 0.02) {
- printf("-----------------\n");
- printf("%f %s %f -> %f\n",
- tmp[al], opname[o1],
- tmp[ar], tmp[4]);
- printf("%f %s %f -> %f\n",
- tmp[bl], opname[o2],
- tmp[br], tmp[5]);
- printf("%f %s %f -> %f\n",
- tmp[cl], opname[o3],
- tmp[cr], tmp[6]);
- }
- }
- }
- }
- }
- static void
- enum_expr2(double *val)
- {
- enum_expr(val, 0, 1, 4, 2, 5, 3);
- enum_expr(val, 1, 2, 0, 4, 5, 3);
- enum_expr(val, 1, 2, 4, 3, 0, 5);
- enum_expr(val, 2, 3, 1, 4, 0, 5);
- enum_expr(val, 0, 1, 2, 3, 4, 5);
- }
- #define SWAP(so1, so2) do { \
- double sotmp = (so1); \
- (so1) = (so2); \
- (so2) = sotmp; \
- } while (0)
- int
- main(void)
- {
- int i, j, k;
- for (i = 0; i < 4; i ++) {
- for (j = 1; j < 4; j ++) {
- for (k = 2; k < 4; k ++) {
- double val[4];
- val[0] = 1.0;
- val[1] = 5.0;
- val[2] = 6.0;
- val[3] = 7.0;
- SWAP(val[0], val[i]);
- SWAP(val[1], val[j]);
- SWAP(val[2], val[k]);
- enum_expr2(val);
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement