组合表达式
问题描述:
请考虑一个由1到N(N=3, 4, 5 … 9)的数字组成的递增数列:1 2 3 … N。现在请在数列中插入’+‘表示加,或者’-‘表示减,抑或是’ '表示空白(表示将前后两个数字组合成一个数字,比如"3 4"中间有一个空格,但认为这个数字是34),来将每一对数字组合在一起(请不在第一个数字前插入符号)。计算该表达式的结果并注意你是否得到了和为零。
请你写一个程序找出所有产生和为零的长度为N的数列。
输入说明:
输入一个数字N(N=3, 4, 5 … 9)
输出说明:
按照ASCII码的顺序(三个符号的大小关系是:’ ’ < ‘+’ < ‘-’),输出所有在每对数字间插入’+’, ‘-’, 或 ’ '后能得到和为零的数列。(注意:就算两个数字之间没有插入符号也应该保留空格)
代码
#include <iostream>
using namespace std;
char str[20];
void dfs(int cur,int num,int sum,int n)//当前位置,值,和,n
{
if(cur==n){
//到最后一个数字
if(sum+num==0) cout<<str<<endl;//符合条件,输出
return;
}
//1 符号为空格
str[2