标题:2008武汉大学软件文化节算法设计大赛D题 出处:Felix021 时间:Sun, 04 May 2008 18:03:57 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?903 内容: 2008武汉大学软件文化节算法设计大赛D题Felix的代码. 超时,需要打表- -|| 程序如下 #include using namespace std; char exp[1000], temp[10]; int n, count1; int eval(char *exp){ char str[1000], t; int i, j, sum, temp; char op = 0; for(i = 0, j = 0; exp[i] != 0; i++){ if(exp[i] == '.' || exp[i] == ' ')continue; str[j++] = exp[i]; } str[j] = 0; sum = 0; i = 0; while(str[i] != 0){ if(str[i] == '+' || str[i] == '-'){ op = str[i]; i++; }else{ temp = atoi(str + i); if(op == 0){ sum = temp; }else if(op == '-'){ sum -= temp; }else if(op == '+'){ sum += temp; } while(true){ if(str[i] == 0 || str[i] == '+' || str[i] == '-')break; i++; } } } return sum; } void go1(int i, int rear){ int bits = i < 10 ? 1 : 2; if(i < n){ sprintf(exp + rear, "%d + ", i); go1(i + 1, rear + bits + 3); sprintf(exp + rear, "%d - ", i); go1(i + 1, rear + bits + 3); sprintf(exp + rear, "%d . ", i); go1(i + 1, rear + bits + 3); }else if(i == n){ sprintf(exp + rear, "%d", i); go1(i + 1, rear + bits); }else{ if(eval(exp) == 0){ count1 ++; if(count1 <= 20) cout << exp << endl; } } } int main(){ int t; cin >> t; while(t--){ count1 = 0; cin >> n; go1(1, 0); cout << count1 << endl; } return 0; } Generated by Bo-blog 2.1.0