24点游戏
来源:互联网 发布:java 常用算法函数 编辑:程序博客网 时间:2024/06/09 13:38
从扑克中每次取出4张牌。
使用加减乘除,第一个能得出24者为赢。
(其中,J代表11,Q代表12,K代表13,A代表1),
按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,
程序自动列出所有可能算出24的表达式,用擅长的语言
(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。
# include<stdio.h> # include <stdlib.h> # include <time.h> //需引用的头文件FILE * fp; void main() { int fun; void play(); //声明函数 srand((unsigned)time(NULL)); //随机数fp=fopen("TopList.txt","wb"); printf("24点游戏欢迎您!\n\n"); while(1) //主界面 { printf("请输入相应选项:1开始游戏,0结束游戏\n"); scanf("%d",&fun); if(fun==1) play(); else break; } printf("谢谢使用"); } //定义play()函数void play() { int k,i,j,x=0,y=0,s[3],m,n,c,q,f=0,e,p[4];//p[4]数组存放输出时的四个运算数, //s[3]分别存放运算结果 int a[4],newp[4],b[4]={1,2,3,4};//a[4]数组存放随机生成的四个数 char p1[3],sign; //定义存储运算符的字符数组 printf("四个数是:"); for(i=0;i<4;i++) { a[i]=rand()%13+1; //获得随机数 printf("%d ",a[i]); } printf("\n"); for(i=0;i<3;i++) { k=i+1; for(n=1;n<=(3-i)*4;n++) { if(((n-1)%4)==0&&n!=1) k++; switch(b[x]) //两个数进行运算 { case 1:s[0]=a[i]+a[k];sign='+';break; case 2:s[0]=a[i]-a[k];sign='-';break; case 3:s[0]=a[i]*a[k];sign='*';break; case 4:s[0]=a[i]/a[k];sign='/';break; } if((x=n%4)==0&&a[i]%a[k]!=0&&a[k]%a[i]!=0||a[k]==0||a[i]==0) //当除数是0时退出 continue; if(n%4==0&&a[k]%a[i]==0) { p[0]=a[k];p1[0]=sign;p[1]=a[i]; } //满足条件就交换顺序 else { p[0]=a[i];p1[0]=sign;p[1]=a[k];} for(e=0;e<4;e++) //找出其余两个数 { if(e!=i&&e!=k) { f++; newp[f]=a[e]; } } newp[0]=s[0]; newp[3]=newp[1]; //存放第一次两个数的运算和与剩下两个数 for(j=0;j<2;j++) { q=j+1; for(m=1;m<=(2-j)*4;m++) { if(((m-1)%4)==0&&m!=1) q++; switch(b[y]) { case 1:s[1]=newp[j]+newp[q];sign='+';break; case 2:s[1]=newp[j]-newp[q];sign='-';break; case 3:s[1]=newp[j]*newp[q];sign='*';break; case 4:s[1]=newp[j]/newp[q];sign='/';break; } if((y=m%4)==0&&newp[j]%newp[q]!=0&&newp[q]%newp[j]!=0||newp[j]==0||newp[q]==0) continue; else if(m%4==0&&newp[q]%newp[j]==0) s[1]=newp[q]/newp[j]; if(j==0) { p1[1]=sign; p[2]=newp[q]; for(c=0;c<4;c++) { switch(b[c]) { case 1:s[2]=s[1]+newp[q+1];sign='+';break; case 2:s[2]=s[1]-newp[q+1];sign='-';break; case 3:s[2]=s[1]*newp[q+1];sign='*';break; case 4:s[2]=s[1]/newp[q+1];sign='/';break; } if(c==3&&s[1]%newp[q+1]!=0&&newp[q+1]%s[1]!=0||newp[q+1]==0||s[1]==0) continue; else if(c==3&&newp[q+1]%s[1]==0) s[2]=newp[q+1]/s[1]; if(s[2]==24) { p1[2]=sign; p[3]=newp[q+1]; if((m%4)==0&&newp[q]%newp[j]==0&&c==3&&newp[q+1]%s[1]==0) //控制输出顺序和运算优先级 printf("(%d%c(%d%c(%d%c%d)))=%d\n",p[3],p1[2],p[2],p1[1],p[0],p1[0],p[1],s[2]); else if((m%4)==0&&newp[q]%newp[j]==0&&c==3&&s[1]%newp[q+1]==0) printf("(%d%c(%d%c%d))%c%d=%d\n",p[2],p1[1],p[0],p1[0],p[1],p1[2],p[3],s[2]); else if((m%4)==0&&newp[j]%newp[q]==0&&c==3&&newp[q+1]%s[1]==0) printf("%d%c((%d%c%d)%c%d)=%d\n",p[3],p1[2],p[0],p1[0],p[1],p1[1],p[2],s[2]); else printf("(((%d%c%d)%c%d)%c%d)=%d\n",p[0],p1[0],p[1],p1[1],p[2],p1[2],p[3],s[2]); } } } if(j==1) { if((m%4)==0&&(newp[q]%newp[j]!=0)&&(newp[j]%newp[q]!=0)||((newp[j]==0||newp[q]==0)&&s[0]!=24)) continue; else { if(m%4==0&&newp[q]%newp[j]==0) //满足条件就交换顺序 { p[2]=newp[q]; p1[1]=sign; p[3]=newp[j]; } else { p[2]=newp[j]; p1[1]=sign; p[3]=newp[q]; } } for(c=0;c<4;c++) { switch(b[c]) { case 1:s[2]=s[1]+s[0];sign='+';break; case 2:s[2]=s[1]-s[0];sign='-';break; case 3:s[2]=s[1]*s[0];sign='*';break; case 4:s[2]=s[1]/s[0];sign='/';break; } if(c==3&&s[1]%s[0]!=0&&s[0]%s[1]!=0||s[0]==0||s[1]==0) break; else if(c==3&&s[0]%s[1]==0) s[2]=s[0]/s[1]; if(s[2]==24) { p1[2]=sign; if(c==3&&s[0]%s[1]==0) //控制输出顺序和运算优先级 { printf("(%d%c%d)%c(%d%c%d)=%d\n",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s[2]); fprintf(fp,"(%d%c%d)%c(%d%c%d)=%d",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s[2]); } else { printf("(%d%c%d)%c(%d%c%d)=%d\n",p[0],p1[0],p[1],p1[1],p[2],p1[2],p[3],s[2]); fprintf(fp,"(%d%c%d)%c(%d%c%d)=%d",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s[2]); } fclose(fp); } } } } } } } }
0 0
- 24点游戏代码
- 24点游戏
- 24点扑克牌游戏
- 24点游戏
- 24点游戏
- 《24点游戏》
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏源码
- 24点游戏
- 24点游戏-hero
- 24点游戏
- 24点游戏算法
- React-Native 与原生的3种交互通信(Android)
- div与span及 block-line块元素与in-line内联元素的区别(H5)
- 动态规划0—1背包问题
- C++使用ADO连接MySql数据库
- mv 命令批量移动文件夹
- 24点游戏
- 类的加载顺序及静态代码块的执行时机
- CJOJ 1160 热浪
- 显示HWC合成(hwc_display_contents_1_t,hwc_layer_1_t数据结构关系)
- 24点游戏
- 如何存储和获取数据
- Effective C++笔记09:绝不在构造函数和析构过程中调用virtual 函数
- 链表面试题——C语言
- Java中关于包的小结