import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n,out;
int c[]=new int[7];
out=0;
char r;
r=' ';
n=in.nextInt();
String array[]=new String[n];
for(int i=0;i<n;i++)
{
array[i]=in.next().intern();
}
for (int i = 0; i < array.length; i++) {
// System.out.println(array[i]);
for(int j=0;j<7;j++)
{
if(j==0|j==2|j==4|j==6)
{
c[j]=(int)array[i].charAt(j)-48;
if(r=='*'&j>=2)
{
c[j]=c[j]*c[j-2];
c[j-2]=0;
}
if(r=='/'&j>=2)
{
c[j]=c[j-2]/c[j];
c[j-2]=0;
}
if(r=='-'&j>=2)
{
c[j]=-c[j];
}
}
if(j==1|j==3|j==5)
{
r=array[i].charAt(j);
}
}
out=c[0]+c[2]+c[4]+c[6];
// System.out.println(c[0]);
// System.out.println(c[2]);
// System.out.println(c[4]);
// System.out.println(c[6]);
// System.out.println(out);
if(out==24)
{
System.out.println("Yes");
}
else
System.out.println("No");
}
}
}
除了这个乘法用x表示以外,if条件里面用的应该是||,||表示或,|表示异或,虽然这道题目用这两个对结果都没影响,目前我能看出来就这两个问题
请描述题目要求
题目中是否要求输入的除号用小写字母 x ?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String[] ins = new String[n];
for (int i = 0; i < n; i++) {
ins[i] = scanner.next();
}
int sum;//点数
int[] num;//操作数
char[] op;//操作符
String input;//输入
for (int i = 0; i < n; i++) {
input = ins[i];
num = new int[4];//初始化
op = new char[3];
num[0] = input.charAt(0) - '0';//第一个操作数
num[1] = input.charAt(2) - '0';//第二个操作数
num[2] = input.charAt(4) - '0';//第三个操作数
num[3] = input.charAt(6) - '0';//第四个操作数
op[0] = input.charAt(1);//第一个操作符
op[1] = input.charAt(3);//第二个操作符
op[2] = input.charAt(5);//第二个操作符
//进行判断,根据运算规则决定位置
if (!judge(op[1]) && judge(op[2])) {//101 001 两端分开执行,最后执行中间
sum = operate(op[1], operate(op[0], num[0], num[1]), operate(op[2], num[2], num[3]));
} else if (!judge(op[0]) && judge(op[1]) && judge(op[2])) {//011 中间开始,左边最后执行
sum = operate(op[0], num[0], operate(op[2], operate(op[1], num[1], num[2]), num[3]));
} else if (!judge(op[0]) && judge(op[1]) && !judge(op[2])) {//010 中间开始,右边最后执行
sum = operate(op[2], operate(op[0], num[0], operate(op[1], num[1], num[2])), num[3]);
} else {//111 110 100 000 顺序执行
sum = operate(op[2], operate(op[1], operate(op[0], num[0], num[1]), num[2]), num[3]);
}
if (sum == 24) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
/**
* 进行四则运算
*
* @param op
* @param num1
* @param num2
* @return
*/
public static int operate(char op, int num1, int num2) {
int sum = 0;
if (op == 'x') {
sum += num1 * num2;
} else if (op == '/') {
sum += num1 / num2;
} else if (op == '+') {
sum += num1 + num2;
} else {
sum += num1 - num2;
}
return sum;
}
/**
* 判断是否为乘除
*
* @param op
* @return
*/
public static boolean judge(char op) {
if (op == 'x' || op == '/') {
return true;
} else {
return false;
}
}
}
题目要求:
我写的没有考虑运算的先后,而是吧每种运算分开处理。把减法的后一个位置取相反数,乘除是把结果放到后面一个位置,前面的一个位置赋0。最后把所有位置相加。用这题给的样例计算结果是正确的
手快打错了,||表示逻辑或,|表示按位或
谢谢,我吧if里的*改成x就对了