“24点游戏”程序简单的C语⾔实现
**
问题描述:
**
从扑克中每次取出4张牌。使⽤加减乘除,第⼀个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求:
随机⽣成4个代表扑克牌牌⾯的数字字母,程序⾃动列出所有可能算出24的表达式,⽤擅长的语⾔(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使⽤⾃定义注释模板)
2.列出表达式⽆重复。
**
分析:
**
1.建⽴⼀个包含运算符的数组。
2.利⽤该数组定义⼀个可以进⾏两个数字四则运算的函数。
3.根据运算符的位置不同导致的运算顺序不同,定义五种不同运算顺序的运算⽅法函数。
4.使⽤穷举法列举所有符号变化的可能性。
5.定义⼀个能够根据符号的变化使⽤对应的运算⽅法函数进⾏计算,并输出运算表达式的函数。
6.随机获得四个范围在1-13内的数字,代表进⾏24点游戏的四张牌。
7.使⽤第五步定义的函数处理这四个数字并输出结果。其中1,11,12,13⽤A,J,Q,K表⽰。
**
实现代码:
**
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
char js[5]={' ','+','-','*','/',};//定义⼀个含有运算符的数组
float jisuan(float x,float y,int js)
{
switch(js)
{
case1:
c语言游戏编程题经典100例
return x + y;
case2:
return x - y;
case3:
return x * y;
case4:
return x / y;
}
}//运算符初始化为了数字
//定义五种运算顺序不同的计算⽅法
float f1(float x1,float x2,float x3,float x4,int js1,int js2,int js3)
float f1(float x1,float x2,float x3,float x4,int js1,int js2,int js3)
{
float r1, r2, r3;
r1 =jisuan(x1,x2,js1);
r2 =jisuan(r1,x3,js2);
r3 =jisuan(r2,x4,js3);
return r3;
}//运算⽅法为(((A B) C) D)
float f2(float x1,float x2,float x3,float x4,int js1,int js2,int js3)
{
float r1, r2, r3;
r1 =jisuan(x2,x3,js2);
r2 =jisuan(x1,r1,js1);
r3 =jisuan(r2,x4,js3);
return r3;
}//运算⽅法为((A (B C)) D)
float f3(float x1,float x2,float x3,float x4,int js1,int js2,int js3)
{
float r1, r2, r3;
r1 =jisuan(x3,x4,js3);
r2 =jisuan(x2,r1,js2);
r3 =jisuan(x1,r2,js1);
return r3;
}//运算⽅法为(A (B (C D)))
float f4(float x1,float x2,float x3,float x4,int js1,int js2,int js3)
{
float r1, r2, r3;
r1 =jisuan(x2,x3,js2);
r2 =jisuan(r1,x4,js3);
r3 =jisuan(x1,r2,js1);
return r3;
}//运算⽅法为(A ((B C) D))
float f5(float x1,float x2,float x3,float x4,int js1,int js2,int js3)
{
float r1, r2, r3;
r1 =jisuan(x1,x2,js1);
r2 =jisuan(x3,x4,js3);
r3 =jisuan(r1,r2,js2);
return r3;
}//运算⽅法为((A B)(C D))
int game24(int x1,int x2,int x3,int x4)
{
int js1,js2,js3;
int flag =0;
for(js1 =1; js1 <=4; js1++){
for(js2 =1; js2 <=4; js2++){
for(js3 =1; js3 <=4; js3++)//使⽤穷举法列举所有符号变化的可能性
{
if(f1(x1,x2,x3,x4,js1,js2,js3)==24)
{
printf("((%d%c%d)%c%d)%c%d=24\n",x1,js[js1],x2,js[js2],x3,js[js3],x4);    flag =1;
}
if(f2(x1,x2,x3,x4,js1,js2,js3)==24)
{
printf("(%d%c(%d%c%d))%c%d=24\n",x1,js[js1],x2,js[js2],x3,js[js3],x4);    flag =1;
}
if(f3(x1,x2,x3,x4,js1,js2,js3)==24)
{
printf("%d%c(%d%c(%d%c%d))=24\n",x1,js[js1],x2,js[js2],x3,js[js3],x4);    flag =1;
}
if(f4(x1,x2,x3,x4,js1,js2,js3)==24)
{
printf("%d%c((%d%c%d)%c%d)=24\n",x1,js[js1],x2,js[js2],x3,js[js3],x4);
printf("%d%c((%d%c%d)%c%d)=24\n",x1,js[js1],x2,js[js2],x3,js[js3],x4);    flag =1;
}
if(f5(x1,x2,x3,x4,js1,js2,js3)==24)
{
printf("(%d%c%d)%c(%d%c%d)=24\n",x1,js[js1],x2,js[js2],x3,js[js3],x4);    flag =1;
}
}
}
}
return flag;
}
int main()
{
int x1,x2,x3,x4;
char end;
do{
printf("24点游戏开始\n");
srand(time(NULL));//随机四个数字
x1=1+(rand()%13);
x2=1+(rand()%13);
x3=1+(rand()%13);
x4=1+(rand()%13);
switch(x1){
case1:
printf("A %d %d %d\n",x2,x3,x4);break;
case11:
printf("J %d %d %d\n",x2,x3,x4);break;
case12:
printf("Q %d %d %d\n",x2,x3,x4);break;
case13:
printf("K %d %d %d\n",x2,x3,x4);break;
default:
break;
}
switch(x2){
case1:
printf("%d A %d %d\n",x1,x3,x4);break;
case11:
printf("%d J %d %d\n",x1,x3,x4);break;
case12:
printf("%d Q %d %d\n",x1,x3,x4);break;
case13:
printf("%d K %d %d\n",x1,x3,x4);break;
default:
break;
}
switch(x3){
case1:
printf("%d %d A %d\n",x1,x2,x4);break;
case11:
printf("%d %d J %d\n",x1,x2,x4);break;
case12:
printf("%d %d Q %d\n",x1,x2,x4);break;
case13:
printf("%d %d K %d\n",x1,x2,x4);break;
default:
break;
}
switch(x4){
case1:
printf("%d %d %d A\n",x1,x2,x3);break;
case11:
printf("%d %d %d J\n",x1,x2,x3);break;
case12:
case12:
printf("%d %d %d Q\n",x1,x2,x3);break; case13:
printf("%d %d %d K\n",x1,x2,x3);break; default:
printf("%d %d %d %d\n",x1,x2,x3,x4); }
if(game24(x1,x2,x3,x4));
else printf("⽆法计算得出24\n");
end =getchar();
}while(end=='\n');
return0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。