CCF-201903-2 简单的二十四点

题目: 

由于时间有限, 直接截取了CCF的截图

思路:

1. 把式子输入到字符串

2.为了操作方便, 把字符串转化为集合

3.先解决乘法除法运算

       步骤:判断运算符, 若为乘号, 则对乘号前后的两个数做乘法运算, 结果保存到临时变量中, 依次删除"乘号"后面的"数字"和"乘号", 把临时变量附给"乘号"前面的值. 这就完成了一次运算. 注意, 因为删除操作,使集合的下标改变了, 所以需要给迭代变量重新赋值. 继续遍历有无乘号或者除号!

       相同的方法, 处理除号.

4.再用相同的方法解决加号减号

5.此时集合中只剩下一个元素了, 即为结果

6.与24比较,输出结果

代码如下: 

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		
		//字符串个数
		int n=sc.nextInt();
		
		//存储最终结果"Yes""No"
		String[] result=new String[n];
		
		for(int i=0;i<n;i++){
			
			//将输入的运算公式放在String数组里
			String string = sc.next();
			
			//由于集合删除元素后,下标会下移,操作方便 把字符串转化为集合
			List<String> list=new ArrayList<String>();
			for(int j=0;j<string.length();j++){
				list.add(string.substring(j,j+1));
			}
			
			//把乘法和除法解决掉, 让剩下的字符串只包含加减运算
			for(int j=1;j<list.size()-1;j++){
				if(list.get(j).equals("*")){//如果运算符是乘号
					//取出乘号两边的数
					int number1=Integer.parseInt(list.get(j-1));
					int number2=Integer.parseInt(list.get(j+1));
					//把结果转化成字符串存放到target变量中
					String target=number1*number2+"";
					//注意移除顺序
					list.remove(j+1);
					list.remove(j);
					list.set(j-1, target);
					//因为以上操作改变了下标,所以应该从头开始遍历
					j=0;
				}else if (list.get(j).equals("/")) {//同理,对除法进行操作
					int number1=Integer.parseInt(list.get(j-1));
					int number2=Integer.parseInt(list.get(j+1));
					String target=number1/number2+"";
					list.remove(j+1);
					list.remove(j);
					list.set(j-1, target);
					j=0;
				}
			}
			
			//处理加法减法运算
			for(int j=1;j<list.size()-1;j++){
				if(list.get(j).equals("+")){
					int number1=Integer.parseInt(list.get(j-1));
					int number2=Integer.parseInt(list.get(j+1));
					String target=number1+number2+"";
					list.remove(j+1);
					list.remove(j);
					list.set(j-1, target);
					j=0;
				}else if (list.get(j).equals("-")) {
					int number1=Integer.parseInt(list.get(j-1));
					int number2=Integer.parseInt(list.get(j+1));
					String target=number1-number2+"";
					list.remove(j+1);
					list.remove(j);
					list.set(j-1, target);
					j=0;
				}
			}
			
			//此时,只剩下一个元素了
			if(list.get(0).equals(24+"")){
				result[i]="Yes";
			}else {
				result[i]="No";
			}
		}
		
		sc.close();
		for (String string : result) {
			System.out.println(string);
		}
	}
}

 测试:

猜你喜欢

转载自blog.csdn.net/qq_41547057/article/details/98876690
今日推荐