题目要求:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。
算法分析:
(1)先利用Random随机在1-13中选出四个数字;
(2)写一个方法text(),其中包含两个数字的加减乘除四种计算结果;
(3)再写一个calculate(),调用text()函数写下的五种公式((a#b)#c)#d,(a#(b#c))#d,a#((b#c)#d),a#(b#(c#d)),(a#b)#(c#d);
(4)写出getnum()函数,将四个随机数放入calculate中进行匹配是否等于24,若等于则输入此式子,若不匹配则不输出。
(5)若没有相匹配的式子则输出这组随机数不能组成24点。
概要设计
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210510195812770.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzUxMTUxODUy,size_16,color_FFFFFF,t_70)
代码
public class Calculate {
String [] symbol = new String[]{"+","-","*","/"};
int flag = 1;
//表达出每种运算符的计算情况
float text(float x,float y,int flag){
float s=0;
switch (flag){
case 0:
s = x+y;
break;
case 1:
s = x-y;
break;
case 2:
s =x*y;
break;
case 3:
s = x/y;
break;
}
return s;
}
//((ab)c)d
float calculatA(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3){
float i = text(a,b,symbol1);
float j = text(i,c,symbol2);
float k = text(j,d,symbol3);
return k;
}
//(a(bc))d
float calculatB(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3){
float i = text(b,c,symbol2);
float j = text(a,i,symbol1);
float k = text(j,d,symbol3);
return k;
}
//a(b(cd))
float calculatC(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3){
float i = text(c,d,symbol3);
float j = text(b,i,symbol2);
float k = text(a,j,symbol1);
return k;
}
//a((bc)d)
float calculatD(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3){
float i = text(b,c,symbol1);
float j = text(i,d,symbol2);
float k = text(a,j,symbol3);
return k;
}
//(ab)(cd)
float calculatE(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3) {
float i = text(a, b, symbol1);
float j = text(c, d, symbol2);
float k = text(i, j, symbol3);
return k;
}
float getNum(int a,int b,int c,int d){
int symbol1,symbol2,symbol3;
int cc = 0;
for(symbol1=0;symbol1<4;symbol1++) {
for (symbol2 = 0; symbol2 < 4; symbol2++) {
for (symbol3 = 0; symbol3 < 4; symbol3++) {
if(calculatA(a,b,c,d,symbol1,symbol2,symbol3)==24) {
System.out.println("((" + a + symbol[symbol1] + b + ")" + symbol[symbol2] + c + ")" + symbol[symbol3] + d + "=24");
cc=1;
}
else
if(calculatB(a,b,c,d,symbol1,symbol2,symbol3)==24) {
System.out.println("(" + a + symbol[symbol1] + "(" + b + symbol[symbol2] + c + "))" + symbol[symbol3] + d + "=24");
cc = 1;
}
else
if(calculatC(a,b,c,d,symbol1,symbol2,symbol3)==24) {
System.out.println(a + symbol[symbol1] + "(" + b + symbol[symbol2] +"("+c + symbol[symbol3] + d + "))" + "=24");
cc = 1;
}
else
if(calculatD(a,b,c,d,symbol1,symbol2,symbol3)==24) {
System.out.println(a + symbol[symbol1] + "((" + b + symbol[symbol2] + c + ")" + symbol[symbol3] + d + ")" + "=24");
cc = 1;
}
else
if(calculatE(a,b,c,d,symbol1,symbol2,symbol3)==24) {
System.out.println("(" + a + symbol[symbol1] + b + ")" + symbol[symbol2] + "(" + c + symbol[symbol3] + d + ")" + "=24");
cc = 1;
}
}
}
}
return cc;
}
}
import java.util.Random;
public class Twentytwo {
public static void main(String[] args) {
System.out.println("******24点小游戏*****");
Random r = new Random();
int [] array = new int[4];
System.out.println("随机生成的四张扑克牌点数为:");
for(int i = 0; i<4;i++){
array[i]=r.nextInt(13)+1;
System.out.print(array[i]+" ");
}
System.out.println();
float cc=0;
Calculate calculate = new Calculate();
cc=calculate.getNum(array[0],array[1],array[2],array[3]);
if(cc!=1){
System.out.println("这组数据不能组成24点");
}
}
}