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__ |
1+2 1-2 1/2 1*2
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!