作业帮 > 综合 > 作业

插入运算符等式成立问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/28 22:20:08
插入运算符等式成立问题
设计程序在表达式“123456789 = a”中左边的适当位置插入运算符“+”“-”或“*”,以使等式成立,列出所有可能情况.例如 当a=100时,123+45-67+8-9 = 100.看清题目要求,我要急用,请回答者能给我完整的程序,最好带有注释,给的分越多哦...想要分我这有,如果悬赏的100分不够我还可以给分...
#include #include #include // 获取下一个n位m进制数,用于映射操作符 int NextNM(int* a,int n,int m) { int i; for(i = 0; i < n; ++i) if(a[i] != m-1) break; if(i == n) return 0; i = n-1; ++a[i]; while(a[i] == m && i >= 0) { a[i] = 0; a[--i]++; } return 1; } // 用于升序快排 int AsceCmp(const void* a,const void* b) { return *(const int*)a - *(const int*)b; } // 交换,用于求组合分割数字 void Swap(int* a,int* b) { int t; t = *a; *a = *b; *b = t; } // 颠倒,用于求组合分割数字 void Reverse(int* begin,int* end) { while(begin < end) Swap(begin++,--end); } // 求下一个组合,分割数字 // 比如1 2 3 4,中间可以插1~3块挡板 // 这个函数的作用是求出所有插n块挡板的可能分割 int NextC(int* begin,int* mid,int* end) { int* p,*k; p = mid; while(1) { if(p == begin) return 0; k = p; if(*--p < *k) { int* r = end; while(*--r < *p); if(r < mid) continue; Swap(r,p); if(k < mid) { qsort(k,r-k,sizeof(int),AsceCmp); Reverse(mid,r); } return 1; } } } // 简单的求值函数 int eval(int* a,int n,int* op) { int* p,i,sum; p = (int*)malloc(sizeof(int)*n); memcpy(p,a,sizeof(int)*n); for(i = 0; i < n-1; ++i) if(op[i] == 2) p[i+1] = p[i] * p[i+1],p[i] = 0; else if(op[i] == 1) p[i+1] = -p[i+1]; sum = 0; for(i = 0; i < n; ++i) sum += p[i]; return sum; }