【题解】P1236 算24点

14 篇文章 0 订阅
9 篇文章 0 订阅

原题链接

题面概述:

给你 4 4 4 个自然数作为操作数,你可以使用四个运算 + , − , × , ÷ , +,-,\times,\div, +,,×,÷,,和 ( ) () ()
要求:

  1. 四个数都是整数,中间结果也必须是整数
  2. 不能 ÷   0 \div \ 0 ÷ 0 (这个还用说吗?)
  3. 运算后等于 24 24 24

如果有解的话,只要输出一个解,输出的是三行数据,分别表示运算的步骤。其中第一行是输入的两个数和一个运算符和运算后的结果,第二行是第一行的结果和一个输入的数据、运算符、运算后的结果,或者是另外两个数的输出结果;第三行是前面的结果第二行的结果或者剩下的一个数字、运算符和“=24”。如果两个操作数有大小的话则先输出大的。

如果没有解则输出No answer!

如果有多重合法解,输出任意一种即可。

注:所有运算结果均为正整数

题意分析:

我们就样例来分析题意:

1 2 3 7
2+1=3
7*3=21
21+3=24
  • 先对于方案种数来看:
    允许改变运算顺序,于是就可以枚举其全排列,(确保每个元素都有 4 4 4 种位置的可能) img
  • 然后对于运算顺序来看:
    一般地,每一种排列,每相邻 2 2 2 个数之间都至少有 + , − , × +,-,\times +,,× 三种运算(除法另行考虑),我们可以将这三个运算先行枚举。
    特殊地,对于除法,我们需要判定一下几个条件:
    1. 除数   ≠   0 \ \neq \ 0  = 0 (这还用说吗?)
    2. 能够整除

img

  • 再对于中间结果来看:
    我们使用一个数组存下全排列,再使用一个数组存下中间的符号,再开一个数组存下中间结果,然后使用dfs的方式遍历求解,利用dfs(int dep, int num)其中,dep表示搜索的深度(中间结果步数),num表示目前在遍历第几种排列方案。
    一旦dep == 5也即所有 4 4 4种方案遍历完毕的时候,累加ans,最后判定ans == 24 {putans()}最后只要输出答案即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值