直接穷举所有情况,但是要注意字典序。 这种题应该一次对……
但是我错了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; }