问题:
输入 n 个大于0的整数,这些整数采用任一顺序,用加减乘除四则运算符连接起来形成一个表达式。假设这四种运算符的优先级相同,即表达式从左向右计算,判断是否存在某个表达式的计算结果为0。
输入格式:
第一行输入 n ,1<n<10。第二行输入 n 个整数
输出格式:
如果存在计算结果为0的表达式,则输出"yes",否则输出"no"。
输入样例:
3
2 3 2
输出样例:
yes
代码实现(java)
import java.util.Scanner;
public class Main {
private static int res;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] c = new int[n];
for (int i = 0; i < n; i++) {
c[i] = scan.nextInt();
}
for (int i = 0; i < c.length; i++) {
res = c[i];
int t = c[i];
c[i] = c[0];
c[0] = t;
calculate(c, 0);
if (res == 0) {
System.out.println("yes");
return;
}
}
System.out.println("no");
}
private static void calculate(int[] c, int n) {
if (n < c.length - 1) {
for (int j = 0; j < 4; j++) {
if (j == 0) {
res += c[n + 1];
calculate(c, n + 1);
if (res == 0)
return;
res -= c[n + 1];
} else if (j == 1) {
res -= c[n + 1];
calculate(c, n + 1);
if (res == 0)
return;
res += c[n + 1];
} else if (j == 2){
res *= c[n + 1];
calculate(c, n + 1);
if (res == 0)
return;
res /= c[n + 1];
}else {
if (res % c[n+1] == 0){
res /= c[n + 1];
calculate(c, n + 1);
if (res == 0)
return;
res *= c[n + 1];
}
}
}
}
}
}
结果截图:

该博客介绍了一个编程问题,要求使用输入的多个正整数通过加减乘除运算构造表达式,判断是否存在使得结果为0的情况。提供的Java代码实现通过递归遍历所有可能的运算组合来寻找答案,并在找到满足条件的表达式时输出yes,否则输出no。
1652

被折叠的 条评论
为什么被折叠?



