四则运算

您所在的位置:网站首页 1555算24点六种算法 四则运算

四则运算

2023-10-22 02:29| 来源: 网络整理| 查看: 265

24点运算——华为 题目描述

计算24点是一种扑克牌益智游戏,随机抽出4张扑克牌,通过加(+),减(-),乘(*), 除(/)四种运算法则计算得到整数24,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写joker表示小王,大写JOKER表示大王: 

                   3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER

本程序要求实现:输入4张牌,输出一个算式,算式的结果为24点。 

详细说明: 

1.运算只考虑加减乘除运算,没有阶乘等特殊运算符号,友情提醒,整数除法要当心; 

2.牌面2~10对应的权值为2~10, J、Q、K、A权值分别为为11、12、13、1; 

3.输入4张牌为字符串形式,以一个空格隔开,首尾无空格;如果输入的4张牌中包含大小王,则输出字符串“ERROR”,表示无法运算; 

4.输出的算式格式为4张牌通过+-*/四个运算符相连,中间无空格,4张牌出现顺序任意,只要结果正确; 

5.输出算式的运算顺序从左至右,不包含括号,如1+2+3*4的结果为24

6.如果存在多种算式都能计算得出24,只需输出一种即可,如果无法得出24,则输出“NONE”表示无解。

输入描述:

输入4张牌为字符串形式,以一个空格隔开,首尾无空格;

输出描述:

如果输入的4张牌中包含大小王,则输出字符串“ERROR”,表示无法运算;

输入输出A A A ANONE

 代码:

from itertools import permutations while True: try: # 直接暴力枚举 def game24(nums): mydict={'A': '1', '2': '2', '3': '3', '4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9', '10': '10', 'J': '11', 'Q': '12', 'K': '13'} exp = '((%s %s %s) %s %s )%s %s' ## 这道题默认括号是这么加的 for data in permutations(nums): for op1 in ['+', '-', '*', '/']: for op2 in ['+', '-', '*', '/']: for op3 in ['+', '-', '*', '/']: m= True if check( exp%(mydict[data[0]],op1,mydict[data[1]],op2,mydict[data[2]],op3,mydict[data[3]])) else False if m : return str(data[0]) + op1 + str(data[1]) + op2 + str(data[2]) + op3 + str(data[3]) return 'NONE' def check(exp): # 为了排除中间/0的情况,并且若等式值为24,返回True try: return int(eval(exp) == 24) except: return False pokers = input().split(' ') if 'joker' in pokers or 'JOKER' in pokers: print('ERROR') else: print(game24(pokers)) except: break 扑克牌四则运算——小米 题目描述

现在有一幅扑克牌,去掉大小王52张牌。随机选出4张牌,可以任意改变扑克牌的顺序,并填入 + - * / 四个运算符,不用考虑括号,除法按整数操作,计算过程中没有浮点数,问是否能够求值得到给定的数m。

输入描述: 一行四个数字 (JQK 分别被替换成11,12,13)单空格分割,另一行输入 m 输出描述: 可以输出1 否则输出0 输入输出13 13 13 13 240

提示: 注意运算符优先级

代码1:

from itertools import permutations #生成列表全排列 data = [int(x) for x in input().split()] # print(permutations(data)) m = int(input()) n=3 flage=False def fun(data,string): global flage if len(data)==1: if eval(string+str(data[0]))==m: print(string+str(data[0])) flage=True return 0 else: fun(data[1:],string+str(data[0])+'+') fun(data[1:], string+str(data[0]) + '-') fun(data[1:], string+str(data[0]) + '*') fun(data[1:], string+str(data[0]) + '//') for data_p in permutations(data): # print(data_p) fun(data_p,'') # print(flage) if flage: print(1) else: print(0)

代码2:

from itertools import permutations # 直接暴力枚举 def solve(nums, m): # 生成所有数字排列 for data in permutations(nums): for op1 in ['+', '-', '*', '//']: for op2 in ['+', '-', '*', '//']: for op3 in ['+', '-', '*', '//']: if m == eval(str(data[0]) + op1 + str(data[1]) + op2 + str(data[2]) + op3 + str(data[3])): print(str(data[0]) + op1 + str(data[1]) + op2 + str(data[2]) + op3 + str(data[3])) return 1 return 0 nums = list(map(int, input().split())) m = int(input()) print(solve(nums, m))

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3