Given an integer N, the task is to print all the possible arithmetic expressions using all numbers from 1 to N and with binary operator +, –, * and /.
Examples:
Input: n = 2
Output:
1+2, 1-2, 1/2, 1*2
Input: n = 3
Output:
1+2+3, 1+2-3, 1+2/3, 1+2*3, 1-2+3, 1-2-3, 1-2/3, 1-2*3
1/2+3, 1/2-3, 1/2/3, 1/2*3, 1*2+3, 1*2-3, 1*2/3, 1*2*3
Approach:
- We will create a character array of length = n + n – 1, because for an expression with n operands to be valid we will need n-1 operators.
- Iterate the array and put numbers at even position whereas symbols at the odd position and call the function recursively.
- If number of characters becomes equal to the length of array, print the array.
Below is the implementation of the above approach:
CPP
// C++ program to print all the // expressions for the input value #include<iostream> #include<bits/stdc++.h> using namespace std;
// Function to print all the // expressions using the number void PrintRecursive( char *str, int arr[],
int i, int n, char *res,
int j, int len, int ln)
{ // Termination condition
if (j==len)
{
res[j]= '\0' ;
cout<<res<<endl;
return ;
}
// Even position will contain
// the numbers
if (j%2==0)
{
res[j]= '0' +arr[i];
// Recursive call
PrintRecursive(str,arr,i+1,n,res,
j+1,len,ln);
}
else
{
// Add a symbol from string in
// odd position.
for ( int k=0;k<ln;k++)
{
res[j]=str[k];
PrintRecursive(str,arr,i,n,res,
j+1,len,ln);
}
}
} void PrintExpressions( int n)
{ // Character array containing
// expressions
char str[4]={ '+' , '-' , '/' , '*' };
str[4]= '\0' ;
int ln= strlen (str);
int a[n];
for ( int i=0;i<n;i++)
{
a[i] = i + 1;
}
char res[( 2 * n ) - 1];
PrintRecursive(str,a,0,n,res,0,
2*n-1,ln);
return ;
} //Driver code int main()
{ int n = 2;
PrintExpressions(n);
return 0;
} |
Java
/*package whatever //do not write package name here */ import java.util.*;
class GFG {
// Function to print all the
// expressions using the number
static void PrintRecursive( char []str, int arr[], int i,
int n, char []res, int j,
int len, int ln)
{
// Termination condition
if (j == len)
{
System.out.println(res);
return ;
}
// Even position will contain
// the numbers
if (j% 2 == 0 )
{
res[j]=( char )( '0' +arr[i]);
// Recursive call
PrintRecursive(str,arr,i+ 1 ,n,res,j+ 1 ,len,ln);
}
else
{
// Add a symbol from string in
// odd position.
for ( int k= 0 ;k<ln;k++)
{
res[j]=str[k];
PrintRecursive(str,arr,i,n,res,j+ 1 ,len,ln);
}
}
}
static void PrintExpressions( int n)
{
// Character array containing
// expressions
char str[] = { '+' , '-' , '/' , '*' };
int ln=str.length;
int a[] = new int [n];
for ( int i= 0 ;i<n;i++)
{
a[i] = i + 1 ;
}
char res[] = new char [( 2 * n ) - 1 ];
PrintRecursive(str,a, 0 ,n,res, 0 , 2 *n- 1 ,ln);
}
public static void main (String[] args)
{
int n = 2 ;
PrintExpressions(n);
}
} // This code is contributed by aadityaburujwale. |
Python3
# Python3 program to print all the # expressions for the input value # Function to print all the # expressions using the number def PrintRecursive( str , arr, i, n, res, j, len , ln):
# Termination condition
if (j = = len ):
print (res)
return
# Even position will contain
# the numbers
if (j % 2 = = 0 ):
res[j] = arr[i]
# Recursive call
PrintRecursive( str ,arr,i + 1 ,n,res,j + 1 , len ,ln)
else :
# Add a symbol from string in
# odd position.
for k in range ( 0 ,ln):
res[j] = str [k]
PrintRecursive( str ,arr,i,n,res,j + 1 , len ,ln)
def PrintExpressions(n):
# Character array containing
# expressions
str = [ '+' , '-' , '/' , '*' ]
ln = len ( str )
a = []
for i in range ( 0 ,n):
a.append( 0 )
a[i] = i + 1
res = []
for i in range ( 0 ,( 2 * n) - 1 ):
res.append('')
PrintRecursive( str , a, 0 , n, res, 0 , 2 * n - 1 , ln)
return
# Driver code n = 2
PrintExpressions(n) # This code is contributed by akashish__ |
C#
using System;
using System.Collections.Generic;
public class GFG {
// Function to print all the
// expressions using the number
public static void PrintRecursive( char [] str, int [] arr,
int i, int n,
char [] res, int j,
int len, int ln)
{
// Termination condition
if (j == len) {
Console.WriteLine(res);
return ;
}
// Even position will contain
// the numbers
if (j % 2 == 0) {
string temp = arr[i].ToString();
res[j] = temp[0];
// Recursive call
PrintRecursive(str, arr, i + 1, n, res, j + 1,
len, ln);
}
else {
// Add a symbol from string in
// odd position.
for ( int k = 0; k < ln; k++) {
res[j] = str[k];
PrintRecursive(str, arr, i, n, res, j + 1,
len, ln);
}
}
}
public static void PrintExpressions( int n)
{
// Character array containing
// expressions
char [] str = new char [4] { '+' , '-' , '/' , '*' };
int ln = str.Length;
int [] a = new int [n];
for ( int i = 0; i < n; i++) {
a[i] = i + 1;
}
char [] res = new char [(2 * n) - 1];
PrintRecursive(str, a, 0, n, res, 0, 2 * n - 1, ln);
return ;
}
static public void Main()
{
int n = 2;
PrintExpressions(n);
}
} // This code is contributed by akashish__ |
Javascript
// JS program to print all the // expressions for the input value // Function to print all the // expressions using the number function PrintRecursive(str, arr, i, n, res, j, len, ln)
{ // Termination condition
if (j==len)
{
res[j];
console.log(res);
return ;
}
// Even position will contain
// the numbers
if (j%2==0)
{
res[j] = arr[i].toString();
// Recursive call
PrintRecursive(str,arr,i+1,n,res,j+1,len,ln);
}
else
{
// Add a symbol from string in
// odd position.
for (let k = 0; k < ln; k++)
{
res[j] = str[k];
PrintRecursive(str,arr,i,n,res,j+1,len,ln);
}
}
} function PrintExpressions(n)
{ // Character array containing
// expressions
let str = [ '+' , '-' , '/' , '*' ];
let ln=str.length;
let a = [];
for (let i = 0; i < n; i++)
{
a.push(0);
a[i] = i + 1;
}
let res = [];
for (let i = 0; i < ( 2 * n ) - 1; i++)
{
res.push( '' );
}
PrintRecursive(str, a, 0, n, res, 0, 2*n-1, ln);
return ;
} // Driver code let n = 2; PrintExpressions(n); // This code is contributed by akashish__ |
Output:
1+2 1-2 1/2 1*2
Recommended Articles