#include <stdio.h>
#define DEBUG 1
#define TESTCASES 9
int max;
char *symble = "+- ";
int isZero(char *str){
//其实用后缀表达式也可以计算结果
int sign = 1;
int value = 0;
int sum = 0;
int i;
for (i = 0; str[i] != '\0'; i++){
char cha = str[i];
if (cha >= '1' && cha <= '9'){
value = value * 10 + cha - '0';
continue;
}
if (cha == '+' || cha == '-'){
sum += sign * value;
value = 0;
sign = (cha == '+' ? 1 : -1);
}
}
sum += sign * value;
return !sum;
}
void insert(char *str, int k){
if (k == max - 1){
if (isZero(str))
printf("%s\n", str);
return;
}
int i;
for (i = 0; i < 3; i++){
str[(k << 1) + 1] = symble[i];
insert(str, k + 1);
}
}
int main(){
#if DEBUG
int testCase;
for (testCase = 1; testCase <= TESTCASES; testCase++){
char inputFileName[20] = "inputx.txt";
inputFileName[5] = '1' + (testCase - 1);
freopen(inputFileName, "r", stdin);
printf("\n#%d\n", testCase);
#endif
scanf("%d", &max);
char str[20] = "1 2 3 4 5 6 7 8 9";
//立马可以截断
str[(max << 1) - 1] = '\0';
insert(str, 0);
#if DEBUG
}
#endif
return 0;
}
USACO 2.3 Zero Sum
最新推荐文章于 2024-01-12 20:12:56 发布