C语言如何实现24点游戏
小编给大家分享一下C语言如何实现24点游戏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
将算法实现改成C语言,并可在linux服务器上运行。同时修改为可显示所有结果。 注:如果传参重复,如4,4,7,7这样,会回显重复结果,暂无法清除。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> constdoublePRECISION=1E-6; #defineCOUNT4 constintRESULT=24; #defineSTRLEN50 doublenumber[COUNT]={0};//这里一定要用double, charexpression[COUNT][STRLEN]={0};//保存表达式 #defineTRUE1 #defineFALSE0 intcnt=0; voidTest(intn) { inti=0; intj=0; intlen=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++){ doublea,b; charexpa[STRLEN]={0}; charexpb[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; } intmain(intargc,char**argv) { inti=0; if(5!=argc) { printf("argerr\n"); return0; } for(i=0;i<COUNT;i++) { charbuffer[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"); } return0; }
运行结果如下:
andy@ubuntu14:~/work$./test5678 ((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$./test7777 Fail
以上是“C语言如何实现24点游戏”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
windows安装touble c
近期有些网友想要了解windows?安装touble的相关情况,小编通过整理给您分享一下。为什么现在还需要TurboC?在当今V...
C/C++如何获取CAN信号
C/C++如何获取CAN信号本篇内容主要讲解“C/C++如何获取C...
C语言怎么通过二分查找实现猜数字游戏
C语言怎么通过二分查找实现猜数字游戏本文小编为大家详细介绍“C语言...
C语言数据结构中的线性表怎么使用
C语言数据结构中的线性表怎么使用这篇文章主要介绍“C语言数据结构中...
C语言的数据结构怎么理解
C语言的数据结构怎么理解这篇文章主要介绍了C语言的数据结构怎么理解...
C语言与C++中内存管理的方法
C语言与C++中内存管理的方法这篇文章主要介绍了C语言与C++中内...
C语言链式队列与循环队列怎么实现
C语言链式队列与循环队列怎么实现这篇文章主要介绍了C语言链式队列与...
C语言冒泡排序怎么实现
C语言冒泡排序怎么实现这篇文章主要介绍了C语言冒泡排序怎么实现的相...
C语言如何实现斐波那契数列
C语言如何实现斐波那契数列这篇文章主要介绍了C语言如何实现斐波那契...
C语言如何实现无符号数和有符号数间的运算
C语言如何实现无符号数和有符号数间的运算本篇内容主要讲解“C语言如...