直接穷举所有情况,但是要注意字典序。 这种题应该一次对……
但是我错了2次
一次是,最后一个数字我给算成两位数的十位了……
一次是字典序问题……
大家要注意好这2个问题就可以了……
#include <iostream>
#include <cstdio>
using namespace std;
int n;
char a[15];
void dfs(int deep, int flag, int fuhao, int tot)
{
if (deep > n )
{
if (tot != 0) return;
if (flag) return;
cout<<1;
for (int i = 2; i <= n; ++ i)
cout<<a[i]<<i;
cout<<endl;
}
if (flag == 1)
{
a[deep] = ' ';
dfs(deep + 1, 0, fuhao, tot + deep * fuhao);
return;
}
a[deep] = '+';
dfs(deep + 1, 1, 1, tot + deep * 10);
dfs(deep + 1, 0, 1, tot + deep);
a[deep] = '-';
dfs(deep + 1, 1, -1, tot - deep * 10);
dfs(deep + 1, 0, -1, tot - deep);
}
int main()
{
cin >> n;
dfs(2,1,1,10);
dfs(2,0,0,1);
return 0;
}