一、 24点规则介绍

24点是棋牌类益智游戏,要求四个数字通过加、减、乘、除运算,最终结果等于二十四。下面要求编写一个程序,随意输入四个数,能够判断这4个数是否能计算出24点。

二、 递归算法原理

由于用循环穷举4个数的排列组合的方法时间复杂度较高,所以想到了递归。四个数的运算必定有两个数先进行运算,那么剩下的相当于是两个未运算的数与一个运算结果,可以看成是从四个数任意挑两个数进行运算变成了三个数任意挑两个数进行运算。这就实现了递归的其中一步,迭代之后只剩下一个数时就是某一种运算的结果。但是这只是一种运算,本算法采用深度优先搜索算法进行穷举。下面是算法流程

  1. 在四个数遍历选两个数;
  2. 通过递归计算该组合在此运算符下的结果;
  3. 如果运算结果是24则退出循环输出 y,如果不是则继续进行深度优先搜索

三、下面是C语言代码

#include <stdio.h>double ys(double a, double b, int n) {double c;if (n == 1)c = a * b;if (n == 2)c = a / b;if (n == 3)c = a + b;if (n == 4)c = a - b;if (n == 5)c = b - a;if (n == 6)c = b / a;return c;
}bool guiyi(double a[], int n) {int i, b, c, k;double t[4];if (n == 1) {if (a[0] == 24)return true;elsereturn false;}for (i = 1; i < 7; i++) {for (b = 0; b < n - 1; b++) {for (c = b + 1; c < n; c++) {int f = 0;for (k = 0; k < n; k++) {if (a[k] != a[b] && a[k] != a[c]) {t[f] = a[k];f++;}}t[f] = ys(a[b], a[c], i);if (guiyi(t, n - 1))return true;}}}return false;
}int main() {double  a[4];scanf("%lf %lf %lf %lf", &a[0], &a[1], &a[2], &a[3]);if (guiyi(a, 4))printf("y");elseprintf("n");
}

24点递归实现(c语言)相关推荐

  1. c语言程序24转换12时间,C语言将24小时制转换为12小时制的方法

    C语言将24小时制转换为12小时制的方法 本文实例讲述了C语言将24小时制转换为12小时制的方法.分享给大家供大家参考.具体实现方法如下: /* * 24小时制转换为12小时制 */ #include ...

  2. 汉诺塔递归的c语言实现(递归)

    对于递归来讲, 汉诺塔实际是经典到不能再经典的例子了,   每个数据结构的教材对会提到. 但是到最后只给出一段类似下面的一段代码: #include<stdio.h>void move(i ...

  3. 快速排序的递归和非递归实现 c语言版本

    代码 挖坑法 解释 选取一个关键字(key)作为枢轴,一般取整组记录的第一个数/最后一个,这里采用选取序列第一个数为枢轴,也是初始的坑位. 设置两个变量i = l;j = r;其中l = 0, r = ...

  4. 【计算理论】正则语言 ( 正则表达式原子定义 | 正则表达式递归定义 | 正则表达式语言原子定义 | 正则表达式语言结构归纳 | 正则表达式语言示例 | 根据正则表达式构造自动机 )

    文章目录 一.正则表达式 定义 二. 正则表达式语言 原子定义 三.正则表达式语言 结构归纳定义 四.正则表达式语言 示例 五.空集 ∅\varnothing∅ 与 空字符 ε\varepsilonε ...

  5. leetcode 236. 二叉树的最近公共祖先 递归解法 c语言

    如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...

  6. leetcode 101. 对称二叉树 递归解法 c语言

    如题: 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的.1/ \2 2/ \ / \ 3 4 4 3但是下面这个 [1,2,2,null,3,null ...

  7. c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析

    C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...

  8. c语言24点游戏流程图,C语言解24点游戏程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前几天在微博上看到24点的游戏,6 6 6 10.算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的 ...

  9. JAVA月数输入24回车后变成12_Java语言程序设计(一)自考2012年10月真题

    Java语言程序设计(一)自考2012年10月真题及答案解析 本试卷为单选题型,填空题,程序填空题,程序分析题,程序设计等题型. 一.单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的,请将 ...

  10. c语言以顺序结构存储的二叉树的非递归遍历,C语言二叉树的非递归遍历实例分析...

    本文以实例形式讲述了C语言实现二叉树的非递归遍历方法.是数据结构与算法设计中常用的技巧.分享给大家供大家参考.具体方法如下: 先序遍历: void preOrder(Node *p) //非递归 { ...

最新文章

  1. arach Linux设置静态,大神面对win7系统archlinux静态网络配置错误造成无法上网的还原办法...
  2. SpringBoot集成Google开源图片处理框架,贼好用!
  3. html中input、label、form、textarea、select
  4. alv界面允许数字输入负号_在Excel中输入这些字符,我被虐哭了
  5. Windows中查找命令的路径 (类似Linux中的which命令)
  6. 服务器pe 装linux,微PE工具箱增加安装Linux/Ubuntu/Centos/deepin系统菜单
  7. Word文档中页眉页脚怎么设置
  8. 自考本科的单科成绩包括英语和计算机吗,自考问题自考统考科目(例如:英语,计算机等 – 手机爱问...
  9. 刷机精灵官网版 v2.1.2 免费版
  10. android 仿飞猪日历,vue 日期选择 类似飞猪
  11. hdmi怎么支持2k分辨率_27寸2k分辨率的护眼显示器推荐:飞利浦275E9使用测评
  12. 芝士满满:TikTok快速吸粉视频技巧
  13. 贝叶斯分类方法-例题
  14. 【矩阵理论】Jordan标准型的理解
  15. Restful API是什么?初探Restful API,传统接口写法与Restful API接口写法区别
  16. java 切换系统输入法,Android7.0更换系统默认输入法
  17. 1.5小时,一键部署Oracle 11GR2 RAC 集群
  18. vue 微信浏览器缓存问题解决方案
  19. rasa x The path ‘config.yml‘ does not exist. Please make sure to use the default location
  20. selenium驱动新版edge

热门文章

  1. 码率 码字(数字通信系统 信息论)
  2. 2019,我们被“黑”科技薅过的羊毛?
  3. 检测卡常见错误代码:12、12、2B、2C、2D、2E、2F、30、31、32、33、34、35、36、37、38、39、3A
  4. 计算机网络的文件怎么删除,教你一招如何删除Win7电脑中的顽固文件
  5. matlab5.0软件下载,MATLAB手机版
  6. MATLAB下载_MATLAB中文版下载
  7. 渗透测试 ( 1 ) --- 必备 工具、导航
  8. 飞信2009_飞信真因为微信消亡吗?谣言!教你看透本质把握个人未来发展方向...
  9. 视频教程-网络工程师实战系列视频课程【VLAN专题】-网络技术
  10. 【记忆法】记忆法推荐书