如何用C语言编写24点游戏源代码?
- 内容介绍
- 文章标签
- 相关推荐
本文共计903个文字,预计阅读时间需要4分钟。
本示例以家庭分享了使用C语言实现24点游戏的整体代码为例,供大家参考。内容如下:
参考文章:C语言实现经典24点算法及在Linux服务器上运行
将经典24点算法实现为C语言代码,并可在Linux服务器上运行。
c#include
// 定义操作符char op[4]={'+', '-', '*', '/'};
// 检查是否是24点int check_24(int n1, int n2, char op1, int n3, int n4, char op2) { if (n1 + n2==24 || n1 + n2==-24) return 1; if (n1 - n2==24 || n1 - n2==-24) return 1; if (n1 * n2==24 || n1 * n2==-24) return 1; if (n1 / n2==24 || n1 / n2==-24) return 1; if (n3 + n4==24 || n3 + n4==-24) return 1; if (n3 - n4==24 || n3 - n4==-24) return 1; if (n3 * n4==24 || n3 * n4==-24) return 1; if (n3 / n4==24 || n3 / n4==-24) return 1; return 0;}
int main() { int n1, n2, n3, n4; char op1, op2;
printf(请输入四个数字:); scanf(%d %d %d %d, &n1, &n2, &n3, &n4);
for (int i=0; i <4; i++) { for (int j=0; j < 4; j++) { for (int k=0; k < 4; k++) { for (int l=0; l < 4; l++) { op1=op[i]; op2=op[j]; if (check_24(n1, n2, op1, n3, n4, op2)) { printf(24点表达式:(%d %c %d) %c %d %c %d\n, n1, op1, n2, op2, n3, op[k], n4); } } } } }
return 0;}
本文实例为大家分享了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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
本文共计903个文字,预计阅读时间需要4分钟。
本示例以家庭分享了使用C语言实现24点游戏的整体代码为例,供大家参考。内容如下:
参考文章:C语言实现经典24点算法及在Linux服务器上运行
将经典24点算法实现为C语言代码,并可在Linux服务器上运行。
c#include
// 定义操作符char op[4]={'+', '-', '*', '/'};
// 检查是否是24点int check_24(int n1, int n2, char op1, int n3, int n4, char op2) { if (n1 + n2==24 || n1 + n2==-24) return 1; if (n1 - n2==24 || n1 - n2==-24) return 1; if (n1 * n2==24 || n1 * n2==-24) return 1; if (n1 / n2==24 || n1 / n2==-24) return 1; if (n3 + n4==24 || n3 + n4==-24) return 1; if (n3 - n4==24 || n3 - n4==-24) return 1; if (n3 * n4==24 || n3 * n4==-24) return 1; if (n3 / n4==24 || n3 / n4==-24) return 1; return 0;}
int main() { int n1, n2, n3, n4; char op1, op2;
printf(请输入四个数字:); scanf(%d %d %d %d, &n1, &n2, &n3, &n4);
for (int i=0; i <4; i++) { for (int j=0; j < 4; j++) { for (int k=0; k < 4; k++) { for (int l=0; l < 4; l++) { op1=op[i]; op2=op[j]; if (check_24(n1, n2, op1, n3, n4, op2)) { printf(24点表达式:(%d %c %d) %c %d %c %d\n, n1, op1, n2, op2, n3, op[k], n4); } } } } }
return 0;}
本文实例为大家分享了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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

