二十四点(201903-2/CCF)———附带思路和完整代码

0 效果

在这里插入图片描述
难点:仔细读题 如何把处理运算优先级

1 题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 思路

  • 1 根据题目分别读入数字和符号存储在数组中;
  • 2 根据符号,来讨论计算的优先级;
    • 当第一个符号为+,-,第二个符号为x/时,优先计算第二个数和第三数的运算,得到结果ans
      • 当第三个符号为x/时,优先计算ans和第四个数的运算
      • 否则按照先后顺序计算
    • 当第一符号为*/时,计算第一个数和第二数的运算,得到结果tempNum1
      • 如果第二个符号是±,第三个符号为x/,优先计算第三个数和第四个数的运算得到结果tempNum2,再根据第二个符号计算tempNum1和tempNum2的运算
      • 否则按照先后顺序计算

注意:乘号的表示是x,而不是*

3 代码

#include<cstdio>

int calNum(int a, int b, char c){
	if(c == '+') return a + b;
	else if(c == '-') return a - b;
	else if(c == 'x') return a * b;
	else if(c == '/') return a/b;
}
int main(){
	int n;
	char symbol[4];
	int number[4];
	scanf("%d", &n);
	while(n--){
		int num;
		char s;
		int ans = 0;
		for(int i = 0;i < 4;i++){
			scanf("%d", &num);
			number[i] = num;
			if(i == 3) break;
			scanf("%c", &s);
			symbol[i] = s;
		}
		if((symbol[1] == 'x' || symbol[1] == '/') && (symbol[0] == '+' || symbol[0] == '-') ){
			ans = calNum(number[1], number[2], symbol[1]);
			if(symbol[2] == 'x' || symbol[2] == '/'){
				ans = calNum(ans, number[3], symbol[2]);
				ans = calNum(ans, number[0], symbol[0]);
			}else{
				ans = calNum(ans, number[0], symbol[0]);
				ans = calNum(ans, number[3], symbol[2]);
			}	
		}else{
				int tempNum1 = calNum(number[0], number[1], symbol[0]);
				if((symbol[2] == 'x' || symbol[2] == '/') && (symbol[1] == '+' || symbol[1] == '-') ){
					int tempNum2 = calNum(number[2], number[3], symbol[2]);
					ans = calNum(tempNum1, tempNum2, symbol[1]);	
				}else{
					ans = calNum(tempNum1, number[2], symbol[1]);	
					ans = calNum(ans, number[3], symbol[2]);	
				}		
		}
		
		if(ans == 24) printf("Yes");
		else printf("No");
		//printf(" %d", ans);
		if(n != 0) printf("\n");
	}
	return 0;
}
/*
10
9+3+4x3
5+4x5x5
7-9-9+8
5x6/5x4
3+5+7+9
1x1+9-9
1x9-5/9
8/5+6x9
6x7-3x6
6x4+4/5
*/
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页