24点游戏 基础版
2017-04-12 18:50
183 查看
基础C语言编写
/****************************************************** File name:24点游戏 // 文件名 Author: Sno:1508010317 class:软工1503 Date:2017.3.19 // 作者及完成日期 Description: 从扑克中每次取出4张牌。使用加减乘除,第一个能 得出24者为赢。(其中,J代表11,Q代表12, K代表13,A代表1),按照要求编程解决24点游戏。 基本要求: 随机生成4个代表扑克牌牌面的数字字母, 程序自动列出所有可能算出24的表达式。 Function List: // 主要函数及其功能 1、menu(); //界面函数 2、search24(int number1, int number2, int number3, int number4, int goal);//算法函数 3、sjchuti(); //随机函数 4、list(); //判断输出函数 5、calTwo(double num1, double num2, char ch); //2个数的计算函数 History: // 历史修改记录 <author> <time> <desc> 2017.04.10 修改警报,成功 2017. 04.12 修改循环结构,成功 2017.04.12 增加输入答案函数,失败 *************************************************/ #include <stdio.h> #include <stdlib.h> #include<time.h> #pragma warning(disable:4996)//将4966警报置为失效 #define GOAL 24 //////主要函数 void search24(int number1, int number2, int number3, int number4, int goal); double calTwo(double num1, double num2, char ch); int sjchuti(); int list(); typedef enum _BOOL { FALSE, TRUE }BOOL; BOOL solution = FALSE; typedef struct _NUM //定义数字结构体 { int value; BOOL isCanUse; }NUM; NUM numbers[4]; //定义结构数组
///////////////////界面函数 int menu() { int s; printf("*******************************\n"); printf("*****24点游戏*****************\n"); printf("0、帮助\n"); printf("1、随机生成4个数\n"); printf("2、生成运算公式\n"); printf("3、退出游戏\n"); printf("*******************************\n"); do { printf("请输入操作(0~3):\n"); scanf("%d", &s); } while (s < 0 || s>3); return s; }
/////////////////////////帮助函数 void help() { system("cls"); /**清屏**/ printf("\n0.欢迎使用游戏帮助!\n"); printf("\n1.初次进入游戏后,请先选择 1 出题;\n"); printf("\n2.按 3 显示结果;\n"); printf("\n4.谢谢您的使用!\n"); getchar(); } int main(void) { for (;;) { switch (menu()) { case 0: help(); break; case 1: sjchuti(); break; case 2:list(); break; case 3:exit(0); break; } } getchar(); printf("按回车键返回主菜单...\n"); return 0; }
////////////////////////随机出题函数 int sjchuti() { system("cls"); srand((unsigned)time(NULL)); printf("四个随机数:\n"); for (int j = 0; j < 4; j++) { numbers[j].value = 1 + rand() % 13; printf("第%d个数为: %d\n", j + 1, numbers[j].value); numbers[j].isCanUse = TRUE; } getchar(); re b54a turn 0; }
//////////////////生成函数 int list() { system("cls"); int array[24][4]; int i = 0, x, j, count = 0; int temp1, temp2, temp3; for (i = 0; i < 4; i++) { numbers[i].isCanUse = FALSE; for (temp1 = 0; temp1 < 4; temp1++) { if (!numbers[temp1].isCanUse) { continue; } numbers[temp1].isCanUse = FALSE; for (temp2 = 0; temp2 < 4; temp2++) { if (!numbers[temp2].isCanUse) { continue; } numbers[temp2].isCanUse = FALSE; for (temp3 = 0; temp3 < 4; temp3++) { if (!numbers[temp3].isCanUse) { continue; } numbers[temp3].isCanUse = FALSE; j = 0; array[count][j++] = numbers[i].value; array[count][j++] = numbers[temp1].value; array[count][j++] = numbers[temp2].value; array[count][j++] = numbers[temp3].value; count++; numbers[temp3].isCanUse = TRUE; } numbers[temp2].isCanUse = TRUE; } numbers[temp1].isCanUse = TRUE; } numbers[i].isCanUse = TRUE; } for (i = 0; i<count; i++) { for (j = 0; j<i; j++) { for (temp1 = 0; temp1<4; temp1++) { if (array[i][temp1] != array[j][temp1]) break; } if (temp1 >= 4) { break; } } if (j >= i) search24(array[i][0], array[i][1], array[i][2], array[i][3], GOAL); } if (!solution) { printf("对不起,该数不能构成24点!!!\n"); } getchar(); return 0; }
/////////计算函数 double calTwo(double num1, double num2, char ch) { switch (ch) { case '+':return num1 + num2; case '-':return num1 - num2; case '*':return num1 * num2; case '/':return num1 / num2; default: printf("ERROR"); return 0; } }//////////////算法函数,参数为随机4个数和24void search24(int number1, int number2, int number3, int number4, int goal){char op[4]; //定义运算符数组int i1, i2, i3;double temp1 = 0, temp2 = 0, temp3 = 0, temp4 = 0;op[0] = '+';op[1] = '-';op[2] = '*';op[3] = '/';for (i1 = 0; i1 < 4; i1++) //通过循环不断调用计算函数计算{for (i2 = 0; i2 < 4; i2++){for (i3 = 0; i3 < 4; i3++){temp1 = calTwo(calTwo(number1, number2, op[i1]), calTwo(number3, number4, op[i3]), op[i2]);temp2 = calTwo(calTwo(number1, calTwo(number2, number3, op[i2]), op[i1]), number4, op[i3]);temp3 = calTwo(calTwo(calTwo(number1, number2, op[i1]), number3,op[i2]), number4, op[i3]);temp4 = calTwo(number1, calTwo(number2, calTwo(number3, number4, op[i3]), op[i2]), op[i1]);///////////输出分优先级,所以分可能输出if (goal == (int)temp1){printf("((%d %c %d) %c (%d %c %d)) = %d\n",number1, op[i1], number2, op[i2], number3, op[i3], number4, (int)temp1); temp1 = 0;solution = TRUE;}if (goal == (int)temp2){printf("((%d %c(%d %c %d))%c %d)=%d\n",number1, op[i1], number2, op[i2], number3, op[i3], number4, (int)temp2); temp2 = 0;solution = TRUE;}if (goal == (int)temp3){printf("(((%d %c %d) %c %d) %c %d) = %d\n",number1, op[i1], number2, op[i2], number3, op[i3], number4, (int)temp3); temp3 = 0;solution = TRUE;}if (goal == (int)temp4){printf("(%d %c (%d %c (%d %c %d)))=%d\n",number1, op[i1], number2, op[i2], number3, op[i3], number4, (int)temp4); temp4 = 0;solution = TRUE;}}}}}
相关文章推荐
- 24点游戏算法
- 编程之美--1.16 24点游戏
- 24点游戏
- 华为oj初级 24点游戏算法
- 编程之美-24点游戏源码
- 24点游戏及其算法
- 24点游戏探秘系列4:趣味征解 (作者 ococo 2003/1/30)
- 经典趣味24点游戏程序设计(python)
- 24点游戏
- C语言设计24点游戏。
- 华为oj 24点游戏算法
- 24点游戏
- C语言:24点游戏
- 24点游戏的一种解法
- ACdream 1740 - 哗啦啦族的24点游戏 (全排列DFS)
- C#实现的24点游戏实例详解
- 24点游戏详细截图介绍以及原型、Alpha、Beta对比
- 24点游戏综述(哪些例子会出现分数的情况)
- [编程之美] PSet1.16 24点游戏
- “24点游戏”