/**
* Question:
Given an array with positive integers and another integer for example{7 2 4} 9,
you are required to generate an equation, by inserting operator add ("+") and minus ("-")
among the array . The left side of equation are consist of the array and the right side of
equation is the integer. here the result is 7-2+4=9
Rules:
Don't include any space in the generated equation.
In case there is no way to create the equation, please output "Invalid". For example {1 1} 10, output is "Invalid"
There is no operator "+" or "-" in front of the first number:
Don't change the order of the numbers. For example: {7 2 4} 9. 7-2+4=9 is correct answer, 4-2+7=9 is wrong answer.
There could be multiple input, meaning your function could be called multiple times. Do remember print a new line after the call.
The length of the integer array is from 1 to 15( include 1 and 15). If the length is 1, for example the input {7} 7, the output is 7=7
Sample Input and Output:
Input:
1 2 3 4 10
1 2 3 4 5
Output:
1+2+3+4=10
Invalid
*
*/
public class JudgeEqual {
public static void createEqualAndPrint(int[] a, int n, int target){
if(a==null || a.length==0 || a.length!=n || n==0){
System.out.println("Invalid");
return;
}
if(n<1 || n>15){
System.out.println("Invalid");
return;
}
int i = n - 1;
int v = 1;
while(i > 1){
v = (v<<1) + 1;
i--;
}
int sum = 0;
String s = null;
while(v > 0){
sum = a[0];
s = a[0]+"";
for(int j=n-1; j>0; j--){
int c = v>>(j-1);
if((c&1) == 1){
sum += a[n-j];
s += "+" + a[n-j];
}else{
sum -= a[n-j];
s += "-" + a[n-j];
}
}
if(sum == target){
System.out.println(s + "=" + target);
return;
}else{
v--;
}
}
System.out.println("Invalid.");
}
/**
* @param args
*/
public static void main(String[] args) {
int[] a = {1, 2, 3, 4};
JudgeEqual.createEqualAndPrint(a, 4, 2);
}
}
判断运算符序列
最新推荐文章于 2023-04-16 21:50:04 发布