Python-CCF:20190302 二十四点

题目

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

用时

19年暑假写的,当时刚开始学Python,自己写运算符的压栈弹栈,写到快昏厥之际发现了Python的eval函数,几分钟简单小十行代码拿了满分,从此坚定了转Python的决心

思路

Python的eval函数提供了由str型表达式计算数学运算结果的方法
只需把 x 换成 * 运算符,把 / 换成表示整除的 // 就可以了

满分代码

n = int(input())
for i in range(n):
    line = input()
    line = line.replace('x', '*')
    line = line.replace('/', '//')
    if eval(line) == 24:
        print("Yes")
    else:
        print("No")

其他版本

Java

import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        in.nextLine();
        while(n-->0){
            String s=in.nextLine();
            ArrayList<String>list=new ArrayList<>();
            for(int i=0;i<7;i++){
                list.add(s.substring(i,i+1));
            }
            if(f(list)==24)
                System.out.println("Yes");
            else
                System.out.println("No");
        }
    }
    public static int f(ArrayList<String>list){//递归计算
        if(list.size()==1)//递归出口
            return Integer.parseInt(list.get(0));
        for(int i=0;i<list.size();i++){
            if(list.get(i).equals("x")||list.get(i).equals("/")){
                list.set(i,""+f2(list.get(i-1),list.get(i),list.get(i+1)));
                list.remove(i+1);
                list.remove(i-1);
                return f(list);
            }
        }
        list.set(1,""+f2(list.get(0),list.get(1),list.get(2)));
        list.remove(2);
        list.remove(0);
        return f(list);
    }
    public static int f2(String x1,String x2,String x3){//计算一个短式子
        int a=Integer.parseInt(x1);
        int b=Integer.parseInt(x3);
        if(x2.equals("+"))
            return a+b;
        else if(x2.equals("-"))
            return a-b;
        else if(x2.equals("x"))
            return a*b;
        else return a/b;
    }
}

C++

#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
int n;
char str[10];
stack<int> num;
stack<char> sign;
int main()
{
    scanf("%d",&n);
    getchar();
    while(!num.empty()) num.pop();
    while(!sign.empty()) sign.pop();
    for(int i=0;i<n;i++)
    {
        gets(str);
        int j=0;
        while(j<strlen(str))
        {
            if(str[j]>'0'&&str[j]<='9')
            {
                num.push(str[j]-'0');
            }
            else if(str[j]=='+')
            {
                sign.push('+');
            }
            else if(str[j]=='-')
            {
                j++;
                num.push((-1)*(str[j]-'0'));
                sign.push('+');
            }
            else if(str[j]=='x')
            {
                int q=num.top();
                num.pop();
                j++;
                int p=str[j]-'0';
                num.push(q*p);
            }
            else if(str[j]=='/')
            {
                int q=num.top();
                num.pop();
                j++;
                int p=str[j]-'0';
                num.push(q/p);
            }
            j++;
        }
        while(!sign.empty())
        {
            int q=num.top();
            num.pop();
            int p=num.top();
            num.pop();
            sign.pop();
            num.push(q+p);
        }
        //printf("%d\n",num.top());
            if(num.top()==24) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

我永远喜欢Python

发布了61 篇原创文章 · 获赞 11 · 访问量 4848

猜你喜欢

转载自blog.csdn.net/weixin_43249758/article/details/104309712