打印给定数字的所有可能的算术表达式
给定一个整数 N,任务是使用从 1 到 N 的所有数字以及二进制运算符+、–、和/,打印所有可能的算术表达式。 例:*
输入: n = 2 输出: 1+2,1-2,1/2,12 输入: n = 3 输出: 1+2+3,1+2-3,1+2/3,1+23,1-2+3,1-2-3,1-2/3,1-2*3 1/2+3,1
进场:
-
我们将创建一个长度为=n+n–1的字符数组,因为要使带有 n 个操作数的表达式有效,我们需要 n-1 个运算符。
-
迭代数组,将数字放在偶数位置,而将符号放在奇数位置,并递归调用函数。
-
如果字符数等于数组长度,则打印数组。
以下是上述方法的实现:
卡片打印处理机(Card Print Processor 的缩写)
// 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;
}
Output:
1+2
1-2
1/2
1*2
版权属于:月萌API www.moonapi.com,转载请注明出处