纯暴力搜索,DFS。而且把搜索结果放到字符串中,之后独立判断,766MS过,太暴力了
这道题单纯搜索一点都不难,连剪枝都不需要,但是就是 ‘.’符号需要进行一些运算,麻烦了一些
#include<stdio.h>
int n, total = 0, time, node = 0;
long long sum;
int num = 0;
char a[15];
void dfs( int cur);
void judge();
int main(void){
scanf("%d", &n);
dfs( 1);
printf("%d\n", num);
return 0;
}
void dfs( int cur){
int i, flag = 1;
if( cur == n){
judge();
if( sum == 0){
if( num < 20){
printf("1");
for( i = 1; i < n; ){
if( flag){
printf(" %c", a[i]);
}
else printf(" %d", ++i);
flag = !flag;
}
printf("\n");
num++;
}
else num++;
}
return;
}
a[cur] = '+';
dfs( cur+1);
a[cur] = '-';
dfs( cur+1);
a[cur] = '.';
dfs( cur+1);
}
void judge(){
int i = 1, shu = 1, temp;
sum = 0;
while( a[i] == '.' ){
if( i > 10) shu *= 100;
else shu *= 10;
shu += i + 1;
i++;
}
sum = sum + shu;
for( ; i < n; ){
if( a[i] == '+'){
shu = i + 1;
i++;
while( a[i] == '.' && i < n){
if( i >= 9) shu *= 100;
else shu *= 10;
shu += i + 1;
i++;
}
sum = sum + shu;
}
else if( a[i] == '-'){
shu = i + 1;
i++;
while( a[i] == '.' && i < n){
if( i >= 9) shu *= 100;
else shu *= 10;
shu += i + 1;
i++;
}
sum = sum - shu;
}
}
return;
}