CCF 201903-2 二十四点

mac2024-05-28  45

CCF 201903-2 二十四点

计算表达式时最好是将操作数和操作符分开,四则运算的规则不复杂但是仍需细致考虑清楚(最开始就是没考虑清楚没拿到满分)。以计算三次为限,先算乘除法时向前替换操作数和操作符,后算加减法时向后运算替换(若计算次数已经是零了就直接取第一步的第一个操作数即为结果)。下面上满分代码:

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = Integer.parseInt(scanner.nextLine()); int[] result = new int[num]; for(int i=0 ; i<num ; i++) { String line = scanner.nextLine(); int[] oper = new int[4]; char[] opan = new char[3]; for(int j=0 ; j<oper.length ; j++) { oper[j]=line.charAt(2*j)-'0'; } for(int j=0 ; j<opan.length ; j++) { opan[j]=line.charAt(2*j+1); } int temp = 0; int count = opan.length; for(int j=0 ; j<count ; j++) { if(opan[j]=='x' || opan[j]=='/') { if(opan[j]=='x') { temp = oper[j]*oper[j+1]; oper[j] = temp; }else if(opan[j]=='/'){ temp = oper[j]/oper[j+1]; oper[j] = temp; } for(int k=j+1 ; k<count ; k++) { oper[k]=oper[k+1]; opan[k-1]=opan[k]; } count--; j--; } } for(int j=0 ; j<count ; j++) { if(opan[j]=='+') { temp = oper[j]+oper[j+1]; oper[j+1] = temp; }else if(opan[j]=='-') { temp = oper[j]-oper[j+1]; oper[j+1] = temp; } } if(count==0) { result[i] = oper[0]; }else { result[i] = temp; } } scanner.close(); for(int i : result) { if(i==24)System.out.println("Yes"); else System.out.println("No"); } } }
最新回复(0)