C语言实现24点游戏计算器的示例代码
脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用
前言
24点游戏计算器的规则如下
24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它能在游戏中提高人们的心算能力。
24点通常是使用扑克牌来进行游戏的,一副牌中抽去大小王后还剩下52张(如果初练也可只用1~10这40张牌),任意抽取4张牌(称为牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须只能用一次,如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3或3×8÷(9-8)或(9-8÷8)×3等。
一、项目的创建标
1、选择项目
打开VS2019,点击创建新项目-》然后选择如下如图所示的选项创建C语言项目
2、输入项目名称和路径
3、创建头文件Main.h、PointGame.h和源文件Main.c、PointGame.c如下所示
二、项目的编写
1、Main.h头文件的编写
2、PointGame.h头文件的编写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #pragma once #include <stdbool.h> #include <math.h> #define PRECISION 1E-6 #define TARGET 24 #define SIZE 4 /* * 最终表达式由四个数、括号、运算符组成,其大小不会超过 * 5 * (SIZE - 1) + SIZE * 2 + 1 */ typedef struct card { double value; char expression[5 * (SIZE - 1) + SIZE * 2 + 1]; } Card, *pCard; bool game24(pCard card, int size); |
3、PointGame.c源文件的编写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | #define _CRT_SECURE_NO_WARNINGS #include "Main.h" #include "PointGame.h" /* * 牌堆中计算24点 * card 牌堆 * size 个数 */ bool game24(pCard card, int size) { Card stack[3]; /* * 如果牌堆里只有一张牌,判断是否就是需要的目标 */ if (size == 1) { if ( fabs (card[0].value - TARGET) < PRECISION) { printf ( "%d = %s\n" , TARGET, card[0].expression); return true ; } else { return false ; } } /* *从牌堆中任选两张牌 */ int m, n, i, t; for (m = 0; m < size - 1; m++) { for (n = m + 1; n < size; n++) { /* * 剩余的牌放入新牌堆 */ t = 0; for (i = 0; i < size; i++) { if (i != m && i != n) { stack[t].value = card[i].value; sprintf (stack[t].expression, "%s" , card[i].expression); t++; } } /* * 选中两张牌的和放入新牌堆 */ stack[size - 2].value = card[m].value + card[n].value; sprintf (stack[size - 2].expression, "(%s + %s)" , card[m].expression, card[n].expression); if (game24(stack, size - 1)) { return true ; } /* * 选中两张牌的差放入新牌堆 */ if (card[m].value > card[n].value) { stack[size - 2].value = card[m].value - card[n].value; sprintf (stack[size - 2].expression, "(%s - %s)" , card[m].expression, card[n].expression); } else { stack[size - 2].value = card[n].value - card[m].value; sprintf (stack[size - 2].expression, "(%s - %s)" , card[n].expression, card[m].expression); } if (game24(stack, size - 1)) { return true ; } /* * 选中两张牌的积放入新牌堆 */ stack[size - 2].value = card[m].value * card[n].value; sprintf (stack[size - 2].expression, "%s * %s" , card[m].expression, card[n].expression); if (game24(stack, size - 1)) { return true ; } /* * 选中两张牌的商放入新牌堆 */ if (card[m].value != 0) { stack[size - 2].value = card[n].value / card[m].value; sprintf (stack[size - 2].expression, "%s / %s" , card[n].expression, card[m].expression); if (game24(stack, size - 1)) { return true ; } } if (card[n].value != 0) { stack[size - 2].value = card[m].value / card[n].value; sprintf (stack[size - 2].expression, "%s / %s" , card[m].expression, card[n].expression); if (game24(stack, size - 1)) { return true ; } } } } return false ; } |
4、Main.c源文件的编写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #define _CRT_SECURE_NO_WARNINGS #include "Main.h" #include "PointGame.h" int main() { system ( "color 3E" ); int i, poke; Card card[SIZE]; printf ( "请输入4个数字 以判断解法:" ); for (i = 0; i < SIZE; i++) { scanf ( "%d" , &poke); card[i].value = ( double )poke; sprintf (card[i].expression, "%d" , poke); } if (game24(card, SIZE)) { printf ( "Done\n" ); } else { printf ( "No Answer\n" ); } system ( "pause" ); return 0; } |
三、项目的调试结果
选择生成----》生成解决方案。
结果如下
按F5调试结果如下所示
到此这篇关于C语言实现24点游戏计算器的示例代码的文章就介绍到这了,更多相关C语言24点游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
最新评论