Descripción del problema
número de la pregunta: | 201903-2 |
Preguntas Nombre: | 24.2 |
Plazo: | 1.0s |
Límite de memoria: | 512.0MB |
preguntar título Descripción: |
Ideas resolución de problemas: de hecho, el tema es una versión simplificada de la "evaluación de la expresión", el método se puede seleccionar la expresión infija notación su vez postfix y luego evaluado, sin embargo, ya que este tema sin el uso de proceso complejo (de hecho, no soy la capacidad. ... Quiero ser perezoso .....). Alternativamente num definir una pila, almacena los valores calculados generados durante variables de vector y, finalmente, acumulando el resultado valor directo array / pila obtenido (un primer valor almacenado en la primera expresión num, y la parte restante de traverse: este símbolo 'x '/' / 'se calcula directamente temp = a * b * o más temp = a / b, a continuación, el valor de la num temp de empuje de admisión, si la señal de corriente es' - 'entonces el num negativo almacenado; si' + ', continúe; empezó a escribir aquí i ++, en busca de un largo tiempo sin errores encontrados, si el carácter actual es un dígito, entonces el num depósito directo).
Los códigos son los siguientes:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
while(n--){
char str[10];
scanf("%s",&str);
stack<int> num;
num.push(str[0] - '0'); // 存入第一个数字
for(int i = 1; str[i] != '\0'; i++){
if(str[i] == 'x' ){
int pre = num.top();
num.pop();
int temp = pre*(str[++i] - '0');
num.push(temp);
}else if(str[i] == '/'){
int pre = num.top();
num.pop();
int temp = pre/(str[++i] - '0');
num.push(temp);
}else if(str[i] == '-'){
int temp = -1 * (str[++i] - '0');
num.push(temp);
}else if(str[i] == '+'){
continue;
}else if(str[i] >= '0' || str[i] <= '9'){
num.push(str[i] - '0');
}
}
int ans = 0;
while(!num.empty()){
int temp = num.top();
num.pop();
ans += temp;
}
if(ans == 24) printf("Yes\n");
else printf("No\n");
}
}
//测试样例
//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