#include <stdio.h>
int op[20];
char s[3] = {'+','-',' '};
int n;
void dfs(int layer,int currentSum,int lastOp,int lastSum)
{
lastSum *= (layer > 9 ? 100 : 10);
lastSum += layer;
if(layer == n)
{
currentSum += (lastOp) ? (-1 * lastSum) : lastSum;
if(currentSum == 0)
{
printf("1");
for(int i = 2;i <= n;i++)
printf("%c%d",s[op[i - 1]],i);
printf("\n");
}
return;
}
op[layer] = 2;
dfs(layer + 1,currentSum,lastOp,lastSum);
currentSum += (lastOp) ? (-1 * lastSum) : lastSum;
op[layer] = 0;
dfs(layer + 1,currentSum,0,0);
op[layer] = 1;
dfs(layer + 1,currentSum,1,0);
}
int main()
{
while(scanf("%d",&n) != EOF)
{
dfs(1,0,0,0);
}
return 0;
}
/**************************************************************
Problem: 1498
User: cust123
Language: C++
Result: Accepted
Time:90 ms
Memory:1020 kb
****************************************************************/
题目1498:寻找表达式
最新推荐文章于 2024-03-23 18:50:08 发布