首页 存档 技术 查看内容

用Python破解微软面试题|24点游戏

2018-3-30 13:00 |来自: 互联网 319 0

摘要: 这是菜鸟学Python的第61篇原创文章 阅读本文大概需要5分钟 最近对算法很有兴趣,算法是程序的灵魂,对于普通的程序,学会一些基本的招式,背熟了常见的API的用法,也就可以应付一般的问题,但是对于复杂的问题的 ...

这是菜鸟学Python的第61篇原创文章

阅读本文大概需要5分钟



最近对算法很有兴趣,算法是程序的灵魂,对于普通的程序,学会一些基本的招式,背熟了常见的API的用法,也就可以应付一般的问题,但是对于复杂的问题的处理,要想成为高手,一定要对算法深入了解,算法其实很有意思,大体分链表,队列,栈,树和图的运用,前段时间看到一个微软的面试题,讲的是24点游戏,于是拿来练手,破解一下,很有意思,跟大家分享一下



1


24点游戏的简介

1.24点游戏是老少皆宜的游戏,玩法很简单

1).给玩家4张牌,每张牌面值1-13之间,允许有相同的牌,

2).采用加,减,乘,除四则运算

3).允许有小数

4),可以用括号,但每张牌只能使用一次


输入:11,8,3,5

输出:(11-8)*(3 5)=24


或者难一点的:

输入:1,7,8,3

输出:3/(1-(7/8)) =24



2


问题初步分析

2.最简单的就是采取暴力破解,穷举法

1).先不考虑括号,因为每个数字只能用一次,对4个数字全排列:4!=4*3*2*1=24


2).运算符[' ','-','*','/']可以选3个,同一个运算符又可以重复出现,对于每一种排列,总共可以有

4*4*4=64

这样的话,就会有64*24=1536种


3).接下来考虑括号,对于4个数字而言,括号插入有两种

  • 只含1对括号,比如:

(11-8)*3 5

(11-8*3) 5

11-(8*3) 5


  • 只含2对括号,在原来第一对括号的情况下,再加一对括号,比如

(11-(8*3)) 5

11-((8*3) 5)


这样的话会有5种,最后有1536*5=7680种



3


算法的初步构思

3.网上对于24点游戏,破解的算法,大多都是降维

  • 就是把4个数字,转换为2个数字的四则运算,然后两两组合计算

  • 或者是4个数字降到3个数字,成了3个数字的4个之问题之和。这些算法用C,Java都可以解决


有没有什么Python特色的算法呢,我昨天晚上苦苦思索一下,发现Python里面有一个特殊的函数,可以天然的处理这个问题,非常方便.我们来看一下到底怎么破~~


Python里面有个函数叫eval,这个函数可以计算表达式:

假如我们有一个字符串s1,是一个表达式


s1='1 2 3 4'

print eval(s1)

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部