将算法实现改成C语言,并可在linux服务器上运行。同时修改为可显示所有结果。 注:如果传参重复,如4,4,7,7这样,会回显重复结果,暂无法清除。
#include #include #include #include const double PRECISION = 1E-6; #define COUNT 4 const int RESULT = 24; #define STRLEN 50double number[COUNT] = {0}; //这里一定要用double,char expression[COUNT][STRLEN] = {0}; //保存表达式 #define TRUE 1#define FALSE 0int cnt = 0;void Test(int n){ int i = 0; int j = 0; int len = 0; //递归结束 if(1 == n){ if(number[0] == RESULT) { // 避免输出前后括号 for (i = 1; i < strlen(expression[0]) - 1; i++) { printf("%c", expression[0][i]); } printf("\n"); cnt++; return; } else return; } //递归过程 for(i=0;i运行结果如下:
andy@ubuntu14:~/work$ ./test 5 6 7 8((5+7)-8)*6(5+7)*(8-6)8/((7-5)/6)(6/(7-5))*86/((7-5)/8)(8/(7-5))*6(6*8)/(7-5)((5-8)+7)*6(7-(8-5))*6(5+7)*(8-6)(6*8)/(7-5)(5+(7-8))*6(5-(8-7))*6Total[13], Successandy@ubuntu14:~/work$ ./test 7 7 7 7Fail