Q :在下面的算式中,添加"+" "-" "x" "/" 4个运算符(可重复),使得这个等式成立
5 ? 5 ? 5 ? 5 ? 5 = 5
看上去很简单的问题对吧,只要利用枚举思想把所有情况都列举出来
然后验证等式是否成立就okay了
但是,乘除的优先级是比加减的优先级要高的
这就导致了算式怎么去计算的问题,如果是任意5个数呢?还有保证不会出现除0错误
其实很简单,只需要强制让 "/" 后面的值不为0就可以解决除零问题
通过定义left和right变量来来优先处理"x"、"/"操作,保存中间结果
通过sign定义运算时的符号就可以很快解决问题了
话不多数,代码撸先
import java.util.Scanner;
public class OperationProblem {
public static void main(String[] args) {
int[] i = new int[4];//表示4个运算符
int sign;//累加运算时的符号
int result; //结果
int count = 0; //计数
int[] num = new int[5]; //输入的5个数字
float left,right; //保存中间结果
char[] oper = new char[]{'+','-','*','/'};
System.out.println("请输入5个数,之间用空格隔开:");
Scanner scanner = new Scanner(System.in);
for (int j=0;j<5;j++) {
num[j] = scanner.nextInt();
}
System.out.println("请输入想要的结果:");
result = scanner.nextInt();
for (i[0] = 0;i[0]<4;i[0]++) {
if (i[0] < 3 || num[1] != 0) {
for (i[1] = 0 ;i[1]< 4;i[1]++) {
if (i[1] < 3 || num[2] != 0) {
for (i[2]=0;i[2]<4;i[2]++) {
if (i[2] < 3 || num[3]!=0) {
for (i[3] = 0;i[3]<4;i[3]++) {
if (i[3]<3 || num[4] != 0) {
left = 0;
right = num[0];
sign = 1;
for (int j=0;j<4;j++) {
switch (oper[i[j]]) {
case '+':
left = left + sign*right;
sign = 1;
right = num[j+1];
break;
case '-':
left = left + sign*right;
sign = -1;
right = num[j+1];
break;
case '*':
right = right*num[j+1];
break;
case '/':
right = right/num[j+1];
break;
}
}
if (left + sign*right == result) {
count++;
System.out.println("count :" + count);
for (int j=0;j<4;j++) {
System.out.print(num[j]+" "+ oper[i[j]] +" ");
}
System.out.println(num[4]+" = "+result);
System.out.println();
}
}
}
}
}
}
}
}
}
if (count == 0) {
System.out.println("没有符合要求的算式!");
}
}
}
网友评论