24 点游戏
来源:互联网 发布:stc89c51单片机烧录 编辑:程序博客网 时间:2024/06/05 16:03
//*********24点纸牌游戏***********//版本:v1.0//创建时间:2017年4月1日//主要功能:系统随机生成1~13的4张牌(1用A代替,11用J代替,12用Q代替,13用K代替),要求将四张牌用加减乘除混合运算求得出24//主要原理:系统通过对随机生成的四张扑克牌进行运算,如果结果为24,则输出结果及结果个数//************************************#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main() { int p[4],c; void Random(int p[4]);//函数声明 void printResult(int p[4]);//函数声明 printf("--------------------------------------------\n*******24点纸牌游戏******\n"); printf("0代表扑克牌中的10\n"); printf("--------------------------------------------\n"); do { printf("随机生成的纸牌为:\n"); Random(p);//函数调用 printf("\n"); printResult(p);//函数调用 printf("1.继续游戏 2.结束\n"); scanf("%d",&c); }while(c==1); return 0; } ////利用系统时间作为种子生成四个随机数并输出void Random(int p[4]) { int i; char Card(int x); srand((unsigned)time(NULL)); for(i=0;i<4;i++) { p[i]=rand()%13+1; printf("%c ",Card(p[i])); } } //如果随机出现的数字为1,则输出A;同样,输出为J,Q,K; char Card(int x) { if(x==1) { return 'A'; } else if(x<10) { return x+'0'; } else if(x==10) { return '0'; } else if(x==11) { return 'J'; } else if(x==12) { return 'Q'; } else if(x==13) { return 'K'; } } //加减乘除四种运算符的运算 double ys(double num1,double num2,char o) { double result; switch(o) { case '+': result=num1+num2; break; case '-': result=fabs(num1-num2); break; case '*': result=num1*num2; break; case '/': result=num1/num2; break; default : break; } return result; } //穷举运算次序 int Result(int p[4],char o[3]) { double t; int a=p[0]; int b=p[1]; int c=p[2]; int d=p[3]; //1.((A*B)*C)*D t=0; t=ys(ys(ys(a,b,o[0]),c,o[1]),d,o[2]); if(fabs(t-24)==0) //如果计算结果的绝对值与24相等,输出结果 { printf("((%c%c%c)%c%c)%c%c\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3])); return 1; } //2.(A*(B*C))*D t=0; t=ys(ys(a,ys(b,c,o[1]),o[0]),d,o[2]); if(fabs(t-24)==0) //如果计算结果的绝对值与24相等,输出结果 { printf("(%c%c(%c%c%c))%c%c\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3])); return 1; } //3.(A*B)*(C*D) t=0; t=ys(ys(a,b,o[0]),ys(c,d,o[2]),o[1]); if(fabs(t-24)==0) //如果计算结果的绝对值与24相等,输出结果 { printf("(%c%c%c)%c(%c%c%c)\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3])); return 1; } //4.A*(B*(C*D)) t=0; t=ys(a,ys(b,ys(c,d,o[2]),o[1]),o[0]); if(fabs(t-24)==0) //如果计算结果的绝对值与24相等,输出结果 { printf("%c%c(%c%c(%c%c%c))\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3])); return 1; } //5.A*((B*C)*D) t=0; t=ys(a,ys(ys(b,c,o[1]),d,o[2]),o[0]); if(fabs(t-24)==0) //如果计算结果的绝对值与24相等,输出结果 { printf("%c%c((%c%c%c)%c%c)\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3])); return 1; } return 0; } //输出可以用几种方法解出答案 void printResult(int p[4]) { char O[4]={'+','-','*','/'}; char o[3]; int i,j,k; int count=0; for(i=0;i<4;i++)//三层for循环列出了所有运算符可能出现的情况 { for(j=0;j<4;j++) { for(k=0;k<4;k++) { o[0]=O[i]; o[1]=O[j]; o[2]=O[k]; if(Result(p,o)==1) count++; } } } printf("共%d种方法\n",count); }
程序运行结果截屏
总结及心得体会:
通过一次一次上机自己动手写程序,使我更加扎实的掌握了知识,在写程序过程中虽然遇到了一些问题,但经过一次又一次的思考、查阅、讨论,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我知识欠缺和经验不足。实践 出真知,通过亲自动手上机,使我掌握的知识不再是纸上谈兵。我相信在这学期的一次次编写程序的过程中,不仅会培养我独立思考、动手操作的能力,在各种其它能力上也都会有提高。更重要的是,在编写代码时,我学会了很多学习的方法,而这是日后最实用的。
0 0
- 24点游戏代码
- 24点游戏
- 24点扑克牌游戏
- 24点游戏
- 24点游戏
- 《24点游戏》
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏源码
- 24点游戏
- 24点游戏-hero
- 24点游戏
- 24点游戏算法
- Linux相关命令记录
- ERP安全
- MySQL数据类型
- 单例模式
- spring boot-使用redis的Keyspace Notifications实现定时任务队列
- 24 点游戏
- Linux errno值含义 与 思考(致命与可修正错误类型)
- spring json
- Iterator
- HDU 2795 Billboard (线段树)
- git
- 待查看网址备份
- jzoj 5055. 【GDOI2017模拟二试4.12】树上路径 点分治
- lua 判断是否是emoji表情