漫画:骚操作系列(一文让你学会如何用代码判断“24“点)

24点”是一种数学游戏,正如象棋、围棋一样是一种人们喜闻乐见的娱乐活动。它始于何年何月已无从考究,但它以自己独具的数学魅力和丰富的内涵正逐渐被越来越多的人们所接受。今天就为大家分享一道关于“24点”的算法题目。

话不多说,直接看题。

01

第679题:24点(困难题目)

第679题:你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24。

示例 1:

输入: [4, 1, 8, 7]

输出: True

解释: (8-4) * (7-1) = 24

示例 2:

输入: [1, 2, 1, 2]

输出: False

注意:

除法运算符 / 表示实数除法,而不是整数除法。例如 4 / (1 - 2/3) = 12 。

每个运算符对两个数进行运算。特别是我们不能用 - 作为一元运算符。例如,[1, 1, 1, 1] 作为输入时,表达式 -1 - 1 - 1 - 1 是不允许的。

你不能将数字连接在一起。例如,输入为 [1, 2, 1, 2] 时,不能写成 12 + 12 。

(今天的代码可能会骚出边际....大家见谅!)

02

题目分析

拿到题目,第一反应就可以想到暴力求解如果我们要判断给出的4张牌是否可以通过组合得到24,那我们只需找出所有的可组合的方式进行遍历。

4个数字,3个操作符,外加括号,基本目测就能想到组合数不会大到超出边界。所以,我们只要把他们统统列出来,不就可以进行求解了吗?说干就干!

我们首先定义个方法,用来判断两个数的的所有操作符组合是否可以得到24

1func judgePoint24_2(a, b float64) bool {
2    return a+b == 24 || a*b == 24 || a-b == 24 || b-a == 24 || a/b == 24 || b/a == 24 
3}

但是这个方法写的正确吗?其实不对!因为在计算机中,实数在计算和存储过程中会有一些微小的误差,对于一些与零作比较的语句来说,有时会因误差而导致原本是等于零但结果却小于或大于零之类的情况发生,所以常用一个很小的数 1e-6 代替 0,进行判读!

(1e-6:表示1乘以10的负6次方。Math.abs(x)<1e-6 其实相当于x==0。1e-6(也就是0.000001)叫做epslon,用来抵消浮点运算中因为误差造成的相等无法判断的情况。这个知识点需要掌握!)

举个例子:

 1func main() {2    var a float643    var b float644    b = 2.05    //math.Sqrt:开平方根6    c := math.Sqrt(2)7    a = b - c*c8    fmt.Println(a == 0)                  //false9    fmt.Println(a < 1e-6 && a > -(1e-6)) //true
10}

这里直接用 a==0 就会得到false,但是通过 a < 1e-6 && a > -(1e-6) 却可以进行准确的判断。

所以我们将上面的方法改写:

 1//go语言2//judgePoint24_2:判断两个数的所有操作符组合是否可以得到243func judgePoint24_2(a, b float64) bool {4    return (a+b < 24+1e-6 && a+b > 24-1e-6) ||5        (a*b < 24+1e-6 && a*b > 24-1e-6) ||6        (a-b < 24+1e-6 && a-b > 24-1e-6) ||7        (b-a < 24+1e-6 && b-a > 24-1e-6) ||8        (a/b < 24+1e-6 && a/b > 24-1e-6) ||9        (b/a < 24+1e-6 && b/a > 24-1e-6) 
10}

完善了通过两个数来判断是否可以得到24的方法,现在我们加一个判断三个数是否可以得到24的方法。

 1//硬核代码,不服来辩!2func judgePoint24_3(a, b, c float64) bool {3    return judgePoint24_2(a+b, c) ||4        judgePoint24_2(a-b, c) ||5        judgePoint24_2(a*b, c) ||6        judgePoint24_2(a/b, c) ||7        judgePoint24_2(b-a, c) ||8        judgePoint24_2(b/a, c) ||9
10        judgePoint24_2(a+c, b) ||
11        judgePoint24_2(a-c, b) ||
12        judgePoint24_2(a*c, b) ||
13        judgePoint24_2(a/c, b) ||
14        judgePoint24_2(c-a, b) ||
15        judgePoint24_2(c/a, b) ||
16
17        judgePoint24_2(c+b, a) ||
18        judgePoint24_2(c-b, a) ||
19        judgePoint24_2(c*b, a) ||
20        judgePoint24_2(c/b, a) ||
21        judgePoint24_2(b-c, a) ||
22        judgePoint24_2(b/c, a)
23}

好了。三个数的也出来了,我们再加一个判断4个数为24点的方法:(排列组合,我想大家都会....)

前方高能!!!

前方高能!!!

前方高能!!!

 1//硬核代码,不服来辩!2func judgePoint24(nums []int) bool {3    return judgePoint24_3(float64(nums[0])+float64(nums[1]), float64(nums[2]), float64(nums[3])) ||4        judgePoint24_3(float64(nums[0])-float64(nums[1]), float64(nums[2]), float64(nums[3])) ||5        judgePoint24_3(float64(nums[0])*float64(nums[1]), float64(nums[2]), float64(nums[3])) ||6        judgePoint24_3(float64(nums[0])/float64(nums[1]), float64(nums[2]), float64(nums[3])) ||7        judgePoint24_3(float64(nums[1])-float64(nums[0]), float64(nums[2]), float64(nums[3])) ||8        judgePoint24_3(float64(nums[1])/float64(nums[0]), float64(nums[2]), float64(nums[3])) ||9
10        judgePoint24_3(float64(nums[0])+float64(nums[2]), float64(nums[1]), float64(nums[3])) ||
11        judgePoint24_3(float64(nums[0])-float64(nums[2]), float64(nums[1]), float64(nums[3])) ||
12        judgePoint24_3(float64(nums[0])*float64(nums[2]), float64(nums[1]), float64(nums[3])) ||
13        judgePoint24_3(float64(nums[0])/float64(nums[2]), float64(nums[1]), float64(nums[3])) ||
14        judgePoint24_3(float64(nums[2])-float64(nums[0]), float64(nums[1]), float64(nums[3])) ||
15        judgePoint24_3(float64(nums[2])/float64(nums[0]), float64(nums[1]), float64(nums[3])) ||
16
17        judgePoint24_3(float64(nums[0])+float64(nums[3]), float64(nums[2]), float64(nums[1])) ||
18        judgePoint24_3(float64(nums[0])-float64(nums[3]), float64(nums[2]), float64(nums[1])) ||
19        judgePoint24_3(float64(nums[0])*float64(nums[3]), float64(nums[2]), float64(nums[1])) ||
20        judgePoint24_3(float64(nums[0])/float64(nums[3]), float64(nums[2]), float64(nums[1])) ||
21        judgePoint24_3(float64(nums[3])-float64(nums[0]), float64(nums[2]), float64(nums[1])) ||
22        judgePoint24_3(float64(nums[3])/float64(nums[0]), float64(nums[2]), float64(nums[1])) ||
23
24        judgePoint24_3(float64(nums[2])+float64(nums[3]), float64(nums[0]), float64(nums[1])) ||
25        judgePoint24_3(float64(nums[2])-float64(nums[3]), float64(nums[0]), float64(nums[1])) ||
26        judgePoint24_3(float64(nums[2])*float64(nums[3]), float64(nums[0]), float64(nums[1])) ||
27        judgePoint24_3(float64(nums[2])/float64(nums[3]), float64(nums[0]), float64(nums[1])) ||
28        judgePoint24_3(float64(nums[3])-float64(nums[2]), float64(nums[0]), float64(nums[1])) ||
29        judgePoint24_3(float64(nums[3])/float64(nums[2]), float64(nums[0]), float64(nums[1])) ||
30
31        judgePoint24_3(float64(nums[1])+float64(nums[2]), float64(nums[0]), float64(nums[3])) ||
32        judgePoint24_3(float64(nums[1])-float64(nums[2]), float64(nums[0]), float64(nums[3])) ||
33        judgePoint24_3(float64(nums[1])*float64(nums[2]), float64(nums[0]), float64(nums[3])) ||
34        judgePoint24_3(float64(nums[1])/float64(nums[2]), float64(nums[0]), float64(nums[3])) ||
35        judgePoint24_3(float64(nums[2])-float64(nums[1]), float64(nums[0]), float64(nums[3])) ||
36        judgePoint24_3(float64(nums[2])/float64(nums[1]), float64(nums[0]), float64(nums[3])) ||
37
38        judgePoint24_3(float64(nums[1])+float64(nums[3]), float64(nums[2]), float64(nums[0])) ||
39        judgePoint24_3(float64(nums[1])-float64(nums[3]), float64(nums[2]), float64(nums[0])) ||
40        judgePoint24_3(float64(nums[1])*float64(nums[3]), float64(nums[2]), float64(nums[0])) ||
41        judgePoint24_3(float64(nums[1])/float64(nums[3]), float64(nums[2]), float64(nums[0])) ||
42        judgePoint24_3(float64(nums[3])-float64(nums[1]), float64(nums[2]), float64(nums[0])) ||
43        judgePoint24_3(float64(nums[3])/float64(nums[1]), float64(nums[2]), float64(nums[0]))
44}

03

Go语言示例

搞定收工,我们整合全部代码如下:

 1//硬核编程...2func judgePoint24(nums []int) bool {3    return judgePoint24_3(float64(nums[0])+float64(nums[1]), float64(nums[2]), float64(nums[3])) ||4        judgePoint24_3(float64(nums[0])-float64(nums[1]), float64(nums[2]), float64(nums[3])) ||5        judgePoint24_3(float64(nums[0])*float64(nums[1]), float64(nums[2]), float64(nums[3])) ||6        judgePoint24_3(float64(nums[0])/float64(nums[1]), float64(nums[2]), float64(nums[3])) ||7        judgePoint24_3(float64(nums[1])-float64(nums[0]), float64(nums[2]), float64(nums[3])) ||8        judgePoint24_3(float64(nums[1])/float64(nums[0]), float64(nums[2]), float64(nums[3])) ||9
10        judgePoint24_3(float64(nums[0])+float64(nums[2]), float64(nums[1]), float64(nums[3])) ||
11        judgePoint24_3(float64(nums[0])-float64(nums[2]), float64(nums[1]), float64(nums[3])) ||
12        judgePoint24_3(float64(nums[0])*float64(nums[2]), float64(nums[1]), float64(nums[3])) ||
13        judgePoint24_3(float64(nums[0])/float64(nums[2]), float64(nums[1]), float64(nums[3])) ||
14        judgePoint24_3(float64(nums[2])-float64(nums[0]), float64(nums[1]), float64(nums[3])) ||
15        judgePoint24_3(float64(nums[2])/float64(nums[0]), float64(nums[1]), float64(nums[3])) ||
16
17        judgePoint24_3(float64(nums[0])+float64(nums[3]), float64(nums[2]), float64(nums[1])) ||
18        judgePoint24_3(float64(nums[0])-float64(nums[3]), float64(nums[2]), float64(nums[1])) ||
19        judgePoint24_3(float64(nums[0])*float64(nums[3]), float64(nums[2]), float64(nums[1])) ||
20        judgePoint24_3(float64(nums[0])/float64(nums[3]), float64(nums[2]), float64(nums[1])) ||
21        judgePoint24_3(float64(nums[3])-float64(nums[0]), float64(nums[2]), float64(nums[1])) ||
22        judgePoint24_3(float64(nums[3])/float64(nums[0]), float64(nums[2]), float64(nums[1])) ||
23
24        judgePoint24_3(float64(nums[2])+float64(nums[3]), float64(nums[0]), float64(nums[1])) ||
25        judgePoint24_3(float64(nums[2])-float64(nums[3]), float64(nums[0]), float64(nums[1])) ||
26        judgePoint24_3(float64(nums[2])*float64(nums[3]), float64(nums[0]), float64(nums[1])) ||
27        judgePoint24_3(float64(nums[2])/float64(nums[3]), float64(nums[0]), float64(nums[1])) ||
28        judgePoint24_3(float64(nums[3])-float64(nums[2]), float64(nums[0]), float64(nums[1])) ||
29        judgePoint24_3(float64(nums[3])/float64(nums[2]), float64(nums[0]), float64(nums[1])) ||
30
31        judgePoint24_3(float64(nums[1])+float64(nums[2]), float64(nums[0]), float64(nums[3])) ||
32        judgePoint24_3(float64(nums[1])-float64(nums[2]), float64(nums[0]), float64(nums[3])) ||
33        judgePoint24_3(float64(nums[1])*float64(nums[2]), float64(nums[0]), float64(nums[3])) ||
34        judgePoint24_3(float64(nums[1])/float64(nums[2]), float64(nums[0]), float64(nums[3])) ||
35        judgePoint24_3(float64(nums[2])-float64(nums[1]), float64(nums[0]), float64(nums[3])) ||
36        judgePoint24_3(float64(nums[2])/float64(nums[1]), float64(nums[0]), float64(nums[3])) ||
37
38        judgePoint24_3(float64(nums[1])+float64(nums[3]), float64(nums[2]), float64(nums[0])) ||
39        judgePoint24_3(float64(nums[1])-float64(nums[3]), float64(nums[2]), float64(nums[0])) ||
40        judgePoint24_3(float64(nums[1])*float64(nums[3]), float64(nums[2]), float64(nums[0])) ||
41        judgePoint24_3(float64(nums[1])/float64(nums[3]), float64(nums[2]), float64(nums[0])) ||
42        judgePoint24_3(float64(nums[3])-float64(nums[1]), float64(nums[2]), float64(nums[0])) ||
43        judgePoint24_3(float64(nums[3])/float64(nums[1]), float64(nums[2]), float64(nums[0]))
44}
45
46func judgePoint24_3(a, b, c float64) bool {
47    return judgePoint24_2(a+b, c) ||
48        judgePoint24_2(a-b, c) ||
49        judgePoint24_2(a*b, c) ||
50        judgePoint24_2(a/b, c) ||
51        judgePoint24_2(b-a, c) ||
52        judgePoint24_2(b/a, c) ||
53
54        judgePoint24_2(a+c, b) ||
55        judgePoint24_2(a-c, b) ||
56        judgePoint24_2(a*c, b) ||
57        judgePoint24_2(a/c, b) ||
58        judgePoint24_2(c-a, b) ||
59        judgePoint24_2(c/a, b) ||
60
61        judgePoint24_2(c+b, a) ||
62        judgePoint24_2(c-b, a) ||
63        judgePoint24_2(c*b, a) ||
64        judgePoint24_2(c/b, a) ||
65        judgePoint24_2(b-c, a) ||
66        judgePoint24_2(b/c, a)
67}
68
69func judgePoint24_2(a, b float64) bool {
70    return (a+b < 24+1e-6 && a+b > 24-1e-6) ||
71        (a*b < 24+1e-6 && a*b > 24-1e-6) ||
72        (a-b < 24+1e-6 && a-b > 24-1e-6) ||
73        (b-a < 24+1e-6 && b-a > 24-1e-6) ||
74        (a/b < 24+1e-6 && a/b > 24-1e-6) ||
75        (b/a < 24+1e-6 && b/a > 24-1e-6)
76}

由于代码过于硬核

我们直接击败100%的对手:

(没想到吧!代码还可以这么写~)

注:本系列所有教程中都不会用到复杂的语言特性,大家不需要担心没有学过相关语法。算法思想最重要,使用各语言纯属本人爱好。同时,所有代码均在leetcode上进行过测试运行,保证其严谨性!

今天的题目应该都能看懂吧....这可是困难题目哦~

大家还有其他的方法来得到答案吗?

评论区留下你的想法吧!


每天一道图解算法,如需进群 ↓↓↓

欢迎加微信:llhaohao


转发是对我最大的支持!

温馨提示

小浩算法~

每天一起学习图解漫画算法。

一起刷题,一起成长!

~长按下方二维码进行关注吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/68248.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改Discuz首页四格列表

优化经典四格版式下的用户界面 CSS&#xff0c;增加了表格间的分割线显示&#xff0c;使页面 UI 更为整齐 效果图&#xff1a; 修改步骤&#xff1a; 1.打开文件&#xff1a;template/default/style/t5/style.css 2.尾部新增样式&#xff1a; .category_newlist {padding: 0…

卡方检验四格表怎么做_SPSS案例实践:2*2四格表卡方检验

在某项调查研究中,所有受访家庭按照家庭收入被分为低收入家庭和中高收入家庭两类,现希望考察不同收入级别的家庭其轿车拥有率是否相同。 SPSS数据如下: 家庭是否拥有轿车是一个二结局的分类变量,要么有要么没有,互斥,所以该问题是一个典型的两个率的差异比较。 01 频数资…

AI漫画生成

文章目录 前言一、漫画生成怎么搞&#xff1f;二、White-box Cartoon Representations1.网络结构2.代码 附 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c…

[四格漫画] 第523话 电脑的买法

翻译至&#xff1a;http://www.atmarkit.co.jp/ait/articles/1610/04/news018.html

四格漫画《MUXing》——发版后……

产品发版上线后&#xff0c;工作并没有结束…… 【本文首发于&#xff1a;百度MUX】http://mux.baidu.com/?p2736 【 关注百度技术沙龙】 本文转自百度技术51CTO博客&#xff0c;原文链接&#xff1a; http://blog.51cto.com/baidutech/770299 &#xff0c;如需转载请自行联系…

四格漫画《MUXing》——度姐传说

MUXING用户研究工程师们热情、专业且富有亲和力。同时&#xff0c;他们也是群有故事的人…… 【本文首发于&#xff1a; 百度用户体验部】 http://mux.baidu.com/?p1169 【 关注百度技术沙龙】 本文转自百度技术51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.c…

四格漫画《MUXing》——请客记

年关将近&#xff0c;聚会增多&#xff0c;请客&#xff1f;还是被请&#xff1f;这是个问题…… 【本文首发于&#xff1a; 百度用户体验部】 http://mux.baidu.com/?p675 【 关注百度技术沙龙】 本文转自百度技术51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51ct…

四格漫画《MUXing》——龙年大吉

2012世界末日就要来了&#xff01;MUXING要集齐龙珠&#xff0c;唤出神龙&#xff0c;拯救世界&#xff01;龙年必须要大吉&#xff01; 【本文首发于&#xff1a;百度MUX】http://mux.baidu.com/?p2866 【 关注百度技术沙龙 本文转自百度技术51CTO博客&#xff0c;原文链接&a…

四格漫画《MUXing》——他们在干什么

黑夜给了我一双黑色的眼睛&#xff0c;我用它来追逐光明&#xff0c;但……他们在干什么&#xff1f; 【本文首发于&#xff1a; 百度用户体验部】 http://mux.baidu.com/?p1859 【 关注百度技术沙龙】 本文转自百度技术51CTO博客&#xff0c;原文链接&#xff1a;http://bl…

四格漫画《MUXing》——MUX诞生记

MUXING 是谁&#xff1f;&#xff1f;&#xff01;&#xff01;据说与外星生物有关……是神秘的…… 木星&#xff08;muxing&#xff09;&#xff0c;为太阳系八大行星之一&#xff0c;距太阳&#xff08;由近及远&#xff09;顺序为第五&#xff0c;亦为太阳系体积最大、自转…

[四格漫画] 第504话 网络相机

本文翻译至&#xff1a;http://www.atmarkit.co.jp/ait/articles/1604/26/news026.html

四格漫画《MUXing》——一场大雪

飞 花厚一尺&#xff0c;和月照三更。 【本文首发于&#xff1a; 百度用户体验部】 http://mux.baidu.com/?p758 【 关注百度技术沙龙】 本文转自百度技术51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/baidutech/747677&#xff0c;如需转载请自行联系原作…

四格漫画《MUXing》——坏习惯

每个人都有这样那样的坏习惯…… 【本文首发于&#xff1a; 百度用户体验部】 http://mux.baidu.com/?p1389 【 关注百度技术沙龙】 本文转自百度技术51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/baidutech/747528&#xff0c;如需转载请自行联系原作者

四格漫画《MUXing》——为生命努力

如果身陷困境中&#xff0c;需要保持镇静&#xff0c;分析所处环境&#xff0c;寻找出路&#xff0c;或根据自身的情况和周围的环境条件&#xff0c;发出不同的求救信号…… 【本文首发于&#xff1a; 百度用户体验部】 http://mux.baidu.com/?p812 【 关注百度技术沙龙】 本文…

四格漫画《MUXing》——扫地神尼

据说在百度每一个部门里&#xff0c;都有一个扫地的老太太…… 【本文首发于&#xff1a; 百度用户体验部】 http://mux.baidu.com/?p725 【 关注百度技术沙龙】 本文转自百度技术51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/baidutech/747705 &#xff…

四格漫画《MUXing》——归乡记

献给为了春运而奋战的朋友们&#xff01;祝大家兔年行大运&#xff01; 【本文首发于&#xff1a; 百度用户体验部】 http://mux.baidu.com/?p707 【 关注百度技术沙龙】 本文转自百度技术51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/baidutech/747793 &…

推荐四格漫画:勇者、魔族、龙族

作者: 黄色书刊 出版社:&#xff1f; 连载中: 第1~150话 http://open.dmzj.com/baiduReader/index.html?comicId40295&partId64901&h5ChapterIndex1&imgIndex0&sourcealaddin&h5ComicId8590006410&h5Title%E5%8B%87%E8%80%85%E7%B3%BB%E5%88%97#/read…

html5 漫画效果,CSS3和js打造四格漫画风格的LightBox特效

在这篇文章中我们想制作一个很有意思四格漫画风格的Lightbox特效。以前在报纸上可以看到很多的四格漫画&#xff0c;我们做的这个特效类似于这个风格&#xff0c;一个大方框中包含4格等宽等高的图片&#xff0c;当点击任意图片的时候&#xff0c;该图片放大到整个大方框的尺寸&…

从菜鸟到大佬(四格漫画)

从前是个与世无争的小菜鸟。 在电光火石中涅槃重生、脱胎换骨。 开始在IT业闯荡世界。 成为众星拱月的江湖大佬。 以上图片来源&#xff1a; 火腿肠里有亚硝酸盐&#xff0c;吃了会致癌吗&#xff1f;|亚硝酸盐|亚硝胺|致癌_新浪新闻 下面是我原创的图&#xff1a; 恭祝各位朋…

恭贺除夕,没什么才艺展示,就给大家画新年四格小漫画吧 >⌒<

** 砂糖橘** 冬季砂糖橘是比较常见的水果之一&#xff0c;很多人觉得砂糖橘吃起来方便&#xff0c;易扒皮&#xff0c;又甜又解渴&#xff0c;酸酸甜甜的口感也很受欢迎&#xff0c;但总有人说砂糖橘吃多了皮肤真的会变黄&#xff0c;事实就是如此&#xff0c;建议大家适量吃砂…