Problem Description:
Consider the sequence of digits from 1 through N (where N=9) in increasing order: 1 2 3 ... N.
Now insert either a '+' for addition or a '-' for subtraction or a ' ' [blank] to run the digits together between each pair of digits (not in front of the first digit). Calculate the result that of the expression and see if you get zero.
Write a program that will find all sequences of length N that produce a zero sum.
PROGRAM NAME: zerosum
INPUT FORMAT
A single line with the integer N (3 <= N <= 9).
Input:
The input includes several cases. For each case, input a single line with the integer N (3 <= N <= 9).
Output:
For each case, the output format is:
In ASCII order, show each sequence that can create 0 sum with a '+', '-', or ' ' between each pair of numbers.
Sample Input:
7
Sample Output:
1+2-3+4-5-6+7
1+2-3-4+5+6-7
1-2 3+4+5+6+7
1-2 3-4 5+6 7
1-2+3+4-5+6-7
1-2-3-4-5+6+7
Consider the sequence of digits from 1 through N (where N=9) in increasing order: 1 2 3 ... N.
Now insert either a '+' for addition or a '-' for subtraction or a ' ' [blank] to run the digits together between each pair of digits (not in front of the first digit). Calculate the result that of the expression and see if you get zero.
Write a program that will find all sequences of length N that produce a zero sum.
PROGRAM NAME: zerosum
INPUT FORMAT
A single line with the integer N (3 <= N <= 9).
Input:
The input includes several cases. For each case, input a single line with the integer N (3 <= N <= 9).
Output:
For each case, the output format is:
In ASCII order, show each sequence that can create 0 sum with a '+', '-', or ' ' between each pair of numbers.
Sample Input:
7
Sample Output:
1+2-3+4-5-6+7
1+2-3-4+5+6-7
1-2 3+4+5+6+7
1-2 3-4 5+6 7
1-2+3+4-5+6-7
1-2-3-4-5+6+7
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define INF 0x3f3f3f3f
int num[20];
int symbol[20];
int n;
int cou()
{
int i,j;
int sum=0;
int ca;
for(i=0;i<=10;i++)
num[i]=i;
for(i=1;i<n;i++)
{
if(symbol[i]==0)
{
num[i+1]+=10*num[i];
num[i]=0;
}
}
/*for(i=1;i<=n;i++)
printf("%d ",num[i]);*/
//printf("\n");
sum=0;
ca=1;
for(i=1;i<n;i++)
{
if(symbol[i]==0)
continue;
if(symbol[i]==1)
{
if(ca==1)
{
sum+=num[i];
}
else
sum-=num[i];
ca=1;
}
if(symbol[i]==2)
{
if(ca==1)
{
sum+=num[i];
}
else
sum-=num[i];
ca=2;
}
}
if(ca==1)
{
sum+=num[n];
}
else
sum-=num[n];
if(sum)
return;
for(i=1;i<n;i++)
{
printf("%d",i);
if(symbol[i]==1)
printf("+");
else if(symbol[i]==2)
printf("-");
else
printf(" ");
}
printf("%d\n",n);
}
void dfs(int a)
{
int i;
if(a==n)
{
cou();
return;
}
for(i=0;i<3;i++)
{
symbol[a]=i;
dfs(a+1);
}
}
int main()
{
int i,j,k;
while(scanf("%d",&n)==1)
{
dfs(1);
}
return 0;
}