#include <bits/stdc++.h>
using namespace std;
int n; // 保存读入的整数N
bool opr[10]; // 可以用一个bool数组保存所有n-1个符号,我们用true表示加号”+”,用false表示减号”-“。
bool found = false; // 表示是否找到一组解,如果没找到的话需要在最后输出”None”
// dfs函数,保存两个状态:deep表示递归深度,就是枚举到第几个数字左边的符号;sum表示之前部分表达式的值。
// 如果枚举完成后sum的值刚好为0,则输出这组方案。我们需要在搜索的过程中用opr数组保存状态。
void dfs(int deep, int sum) {
// 请在下面的条件表达式中填上对应的值。
if (deep == n) {
if (sum == 0) {
found = true;
// 请在下面将最终方案输出,方案格式参照题目描述。
// 最后记得换行哦。
for(deep=1;deep<=n;deep++){
if(deep==n)
printf(“%d”,deep);
else if(opr[deep]==true){
printf(“%d”,deep);
printf(“+”);}
else if(opr[deep]==false){
printf(“%d”,deep);
printf(“-“);}
}
printf(“\n”);
}
return ;
}
// 请在下面的语句中填出正确的逻辑。
opr[deep] = true;
dfs(deep+1,sum+deep+1);
opr[deep] = false;
dfs(deep+1,sum-deep-1);
}
// main函数请自己完成哦,加油~
int main() {
scanf(“%d”,&n);
dfs(1,1);
if(found==false){
printf(“None”);
}
return 0;
} //此题是一道典型的深度搜索题型,状态之间的不断转移,dfs(1,1)是第一个状态,如果+则第二个状态是dfs(2,3),以此类推,故循环体的 sum = 前一个sum + 或 – 当前的deep(上一个deep+1)