前言
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头文件的编写
- #pragma once
-
- #include <stdio.h>
- #include <stdlib.h>
2、PointGame.h头文件的编写
- #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源文件的编写
- #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源文件的编写
- #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点游戏内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!