#include <stdio.h> #include <math.h> #define TheBigNumber 9999999 //出错信息 #define Epslon 0.0000000001 typedef double (*pfddd)( double, double); double add( double, double); double sub( double, double); double mult( double, double); double div( double, double); void convert( char, int); int cardsnum[4]; int is24 (double x) { return fabs(x - 24) < Epslon ; } void test( char a, char b, char c, char d) { pfddd f[4] = {add, sub, mult, div}; char o[4] = {'+', '-', '*', '/'}; int i, j, k, l, m, n; convert( a, 0); convert( b, 1); convert( c, 2); convert( d, 3); for (i = 0; i < 4; ++i) for (j = 0; j < 4; ++j) { if (j == i) continue; for (k = 0; k < 4; ++k) { if (k == i || k == j) continue; for (l = 0; l < 4; ++l) for (m = 0; m < 4; ++m) for (n = 0; n < 4; ++n) if (is24 (f[n]( f[m]( f[l](cardsnum[i], cardsnum[j]), cardsnum[k]), cardsnum[6-i-j-k]))) { /*printf( "((%d %c %d) %c %d) %c %d\n", cardsnum[i], o[l], cardsnum[j], o[m], cardsnum[k], o[n], cardsnum[6-i-j-k]);*/ printf( "yes\n"); return; } else if (is24 (f[n]( f[l](cardsnum[i], f[m]( cardsnum[j], cardsnum[k])), cardsnum[6-i-j-k]))) { /*printf( "(%d %c (%d %c %d)) %c %d\n", cardsnum[i], o[l], cardsnum[j], o[m], cardsnum[k], o[n], cardsnum[6-i-j-k]);*/ printf( "yes\n"); return; } else if (is24 (f[m]( f[l](cardsnum[i], cardsnum[j]), f[n]( cardsnum[k], cardsnum[6-i-j-k])))) { /*printf( "(%d %c %d) %c (%d %c %d)\n", cardsnum[i], o[l], cardsnum[j], o[m], cardsnum[k], o[n], cardsnum[6-i-j-k]);*/ printf( "yes\n"); return; } else if (is24 (f[l](cardsnum[i], f[n]( f[m]( cardsnum[j], cardsnum[k]), cardsnum[6-i-j-k])))) { /*printf( "%d %c ((%d %c %d) %c %d)\n", cardsnum[i], o[l], cardsnum[j], o[m], cardsnum[k], o[n], cardsnum[6-i-j-k]);*/ printf( "yes\n"); return; } else if (is24 (f[l](cardsnum[i], f[m]( cardsnum[j], f[n]( cardsnum[k], cardsnum[6-i-j-k]))))) { /*printf( "%d %c (%d %c (%d %c %d))\n", cardsnum[i], o[l], cardsnum[j], o[m], cardsnum[k], o[n], cardsnum[6-i-j-k]);*/ printf( "yes\n"); return; } } } printf( "no\n"); return; }

评论