csp201903-2的题,样例尝试是对的,提交只有40分。有没有dalao帮看看为什么

 

 

 

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就对了