n个数,+、-、.号等于0的等式 输出等式和总过的等式
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
const int MAXN=20;
const int MAXM=16;
char str[MAXM],opt[MAXN][MAXM];
int n,cnt;
void dfs(int deep,int num,int pre)
{
int now,k;
if(deep==n)
{
str[n]='\0';
if(num==0)
{
if(cnt<MAXN)
{
strcpy(opt[cnt],str);
}
cnt++;
}
}
else
{
str[deep-1]='+';
dfs(deep+1,num+deep+1,deep+1);
str[deep-1]='-';
dfs(deep+1,num-deep-1,deep+1);
str[deep-1]='.';//如果是.号的话要计算now,分情况讨论
if(deep+1>=10)
now=100*pre+deep+1;
else
now=10*pre+deep+1;
int j=deep-1;
while(str[j]=='.'&&j>=0)j--;
if(j<0)
k=now;
else if(str[j]=='+')k=num+now-pre;
else k=num-now+pre;
dfs(deep+1,k,now);
}
}
int main()
{
int i,j;
while(scanf("%d",&n)!=EOF)
{
cnt=0;
dfs(1,1,1);
for(i = 0; i < cnt; i ++) {
if(i == MAXN) break;
for(j = 0; opt[i][j]; j ++)
printf("%d %c ", j + 1, opt[i][j]);
printf("%d\n", n);
}
printf("%d\n", cnt);
}
return 0;
}