欢迎来到入门教程网!

C语言

当前位置:主页 > 软件编程 > C语言 >

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

来源:本站原创|时间:2020-01-10|栏目:C语言|点击:

本文实例为大家分享了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

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

上一篇:C语言实现扫雷小游戏(扩展版可选择游戏难度)

栏    目:C语言

下一篇:C语言实现简单扫雷小程序

本文标题:C语言实现24点游戏源代码

本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/168.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有