C语言实现24点游戏源代码

本文实例为大家分享了C语言实现24点游戏的具体代码,供大家参考,具体内容如下

参考文章:C语言实现经典24点算法

将算法实现改成C语言,并可在linux服务器上运行。同时修改为可显示所有结果。
注:如果传参重复,如4,4,7,7这样,会回显重复结果,暂无法清除。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> 

const double PRECISION = 1E-6;
#define COUNT 4
const int RESULT = 24;
#define STRLEN 50
double number[COUNT] = {0};  //这里一定要用double,
char expression[COUNT][STRLEN] = {0}; //保存表达式 

#define TRUE 1
#define FALSE 0

int cnt = 0;

void Test(int n)
{
 int i = 0;
 int j = 0;
 int len = 0;
 //递归结束
 if(1 == n){
  if(number[0] == RESULT)
  {
   // 避免输出前后括号
   for (i = 1; i < strlen(expression[0]) - 1; i++)
   {
    printf("%c", expression[0][i]);
   }
   printf("\n");
   cnt++;
   return;
  }
  else
   return;
 }
 //递归过程
 for(i=0;i<n;i++){
  for(j=i+1;j<n;j++){
   double a,b;
   char expa[STRLEN] = {0};
   char expb[STRLEN] = {0};
   a=number[i];
   b=number[j];
   // 删除number[j]元素,用number[n-1]填补
   number[j]=number[n-1];
   strcpy(expa, expression[i]);
   strcpy(expb, expression[j]);
   // 删除expression[j]元素,用expression[n-1]填补
   strcpy(expression[j], expression[n-1]);

   // 加法
   len= strlen(expression[i]);
   snprintf(expression[i], STRLEN, "(%s+%s)", expa, expb);
   number[i]=a+b;
   Test(n-1);
   //减号有两种情况,a-b与b-a
   len= strlen(expression[i]);
   snprintf(expression[i], STRLEN, "(%s-%s)", expa, expb);
   number[i]=a-b;
   Test(n-1);
   if(a != b)
   {
    len= strlen(expression[i]);
    snprintf(expression[i], STRLEN, "(%s-%s)", expb, expa);
    number[i]=b-a;
    Test(n-1);
   }
   // 乘法
   len= strlen(expression[i]);
   snprintf(expression[i], STRLEN, "(%s*%s)", expa, expb);
   number[i]=a*b;
   Test(n-1);
   //除法也有两种情况,a/b与b/a
   if(b!=0){
    len= strlen(expression[i]);
    snprintf(expression[i], STRLEN, "(%s/%s)", expa, expb);
    number[i]=a/b;
    Test(n-1);
   }
   if((a!=0) && (a != b)){
    len= strlen(expression[i]);
    snprintf(expression[i], STRLEN, "(%s/%s)", expb, expa);
    number[i]=b/a;
    Test(n-1);
   }
   //恢复数组
   number[i]=a;
   number[j]=b;
   strcpy(expression[i], expa);
   strcpy(expression[j], expb);
  }
 }
 return;
}
int main(int argc, char **argv)
{
 int i = 0;

 if(5 != argc)
 {
  printf("arg err\n");
  return 0;
 }

 for(i=0;i<COUNT;i++)
 {
  char buffer[20];
  number[i] = atoi(argv[i + 1]);
  strcpy(expression[i], argv[i + 1]);
 } 

 Test(COUNT);

 if(0 != cnt)
 {
  printf("Total[%d], Success\n", cnt);
 }
 else
 {
  printf("Fail\n");
 }
 return 0;
} 

运行结果如下:

andy@ubuntu14:~/work$ ./test 5 6 7 8
((5+7)-8)*6
(5+7)*(8-6)
8/((7-5)/6)
(6/(7-5))*8
6/((7-5)/8)
(8/(7-5))*6
(6*8)/(7-5)
((5-8)+7)*6
(7-(8-5))*6
(5+7)*(8-6)
(6*8)/(7-5)
(5+(7-8))*6
(5-(8-7))*6
Total[13], Success
andy@ubuntu14:~/work$ ./test 7 7 7 7
Fail

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现纸牌计算24点小游戏

    利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节未处理,待完成ing...对于代码中的错误,恳请批评指正. 游戏描述: A-10:分别代表数字 1-10. J,Q,K:均代表数字1. 考虑到部分地方的规则,J,Q,K 也可以当成10 ,或者直接代表本身所代表的数字,即11.12.13来运算. 使用加减乘除,能得出24者为赢,存在无解情况. 游戏开始得分为1000分,每一秒钟减少

  • C语言实现扑克牌计算24点

    题目描述: 一副扑克牌的每张牌表示一个数(J.Q.K分别表示11.12.13,两个司令都表示6).任取4张牌,即得到4个1~13的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式.每个数只能参与一次运算,4个数顺序可以任意组合,4个运算符任意取3个且可以重复取.运算遵从一定优先级别,可加括号控制,最终使运算结果为24.请输出一种解决方案的表达式,用括号表示运算优先.如果没有一种解决方案,则输出-1表示无解. 输入格式说明: 输入在一行中给出4个整数,每个整数取值在[1,

  • C语言实现24点游戏源代码

    本文实例为大家分享了C语言实现24点游戏的具体代码,供大家参考,具体内容如下 参考文章:C语言实现经典24点算法 将算法实现改成C语言,并可在linux服务器上运行.同时修改为可显示所有结果. 注:如果传参重复,如4,4,7,7这样,会回显重复结果,暂无法清除. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> const double PRECISION

  • C语言实现24点游戏计算器的示例代码

    目录 前言 一.项目的创建标 二.项目的编写 三.项目的调试结果 前言 24点游戏计算器的规则如下 24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它能在游戏中提高人们的心算能力. 24点通常是使用扑克牌来进行游戏的,一副牌中抽去大小王后还剩下52张(如果初练也可只用1-10这40张牌),任意抽取4张牌(称为牌组),用加.减.乘.除(可加括号)把牌面上的数算成24.每张牌必须只能用一次,如

  • C++实现简单24点游戏

    本文实例为大家分享了C++实现简单24点游戏的具体代码,供大家参考,具体内容如下 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题. 程序风格良好(使用自定义注释模板) 列出表达式无重复. 以下为源代码 #include<iostream> #include<string> #include <stdlib.h> #include<time.h> using names

  • 用纯C语言实现贪吃蛇游戏

    本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 在读大学生一枚,五一期间用四天时间写一个小游戏. 本贪吃蛇游戏代码共计531行,开发环境是VS,游戏分为两种模式,标准模式和超大地图模式,详细看以下源代码,并进入游戏体验具体内容. //贪吃蛇 #include<stdio.h> #include<windows.h> #include<time.h> #include<conio.h> //游戏窗口 #define FrameX

  • C语言实现打飞机游戏

    本文实例为大家分享了C语言实现打飞机游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<time.h> #define U 1 #define D 2 #define L 3 #define R 4 typedef struct node //己方飞机的节点 { int x; int y; struct node *next; }node

  • C语言实现贪吃蛇游戏设计

    C语言实现贪吃蛇,供大家参考,具体内容如下 实验平台:DEV C++ /******************************************************************************** *File name:SnakeGame3.0.c *Description:贪吃蛇游戏源代码(C语言),采用 *宽度优先算法,计算蛇到食物的最短路径(时间复杂度n^3空间复杂度n^2),这个算法遇 * *到自身围困情况将失效,无法计算出最短路径 * *******

  • C语言实现贪吃蛇游戏代码

    本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 //------------------------------------------problm区------------------------------ //①思考typedef 定义的变量如何利用fwrite进行存储 //②典型可利用sleep()语句类实现控制移动速度 //③BOOL PlaySoundW(LPCWSTR, HMODULE, DWORD)": 无法将参数 1 从"const ch

  • C语言实现贪吃蛇游戏(单人版)

    本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 相比于第一个:贪吃蛇游戏,功能更加丰富 #include"snake.h" //蛇的移动 void move_snake(); //画出蛇 void draw_snake(); //产生食物 void creatfood(); //判断蛇是否吃到食物 void eatfood(); //判断蛇是否死掉 void SnakeState(); int main() { //设置窗口大小 system("

  • Python实现我的世界小游戏源代码

    我的世界小游戏使用方法: 移动 前进:W,后退:S,向左:A,向右:D,环顾四周:鼠标,跳起:空格键,切换飞行模式:Tab; 选择建筑材料 砖:1,草:2,沙子:3,删除建筑:鼠标左键单击,创建建筑块:鼠标右键单击 ESC退出程序. 完整程序包请通过文末地址下载,程序运行截图如下: from __future__ import division import sys import math import random import time from collections import deq

  • 二十种Python代码游戏源代码分享

    学Python中,自我感觉学的还不错的亚子~想做点什么来练练手,然后我疯狂的找各种小游戏的教程源码什么的,于是我就疯狂的找呀找呀,就找到了一大堆,哈哈哈 毕竟我是从小就有一个游戏梦,现在就弥补一下自己小时候没有玩过瘾的游戏补上叭~ 提示:爱学习哦,不要沉迷游戏,平时打发一下无聊时间最好啦 拿走源码的还请留言说一下好吗?不管是想学习的想转发的想干啥的,还请都点个赞说一下不,我也找的不容易呀 1.21点数字小游戏展示: 首先配置文件的源码: '''配置文件''' import os # 一些常量 R

随机推荐