问题描述:
24点游戏是经典的纸牌益智游戏。
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。
算法分析:
首先从控制台输入四个数据存储到数组中,并判断输入的数据的准确(要求数据在1—13之间),定义数组存放四个运算符方便获取,再使用循环嵌套将四个数分别从前至后依次运算,运算中使用equals判断使用的是哪个运算符并保存数据,在得到的所有结果中输出最后结果等于24的结果,并且定义布尔型变量flag判断输入的数字是否可以达到想要的结果,正确即为true,反之为flase。
概要设计:
测试:
测试用例:6 8 4 4
结果:
源代码:
package java24dian;
import java.util.Scanner;
public class java24dian {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int shu[] = new int[4];
//判断输入的数字是否符合要求
int b;
System.out.println ("请输入4个(1-13)的数字:");
for (int i = 0; i < shu.length; i++) {
b = scan.nextInt ();
//判断输入的数字是否合法
if (b <= 0 || b > 13) {
System.out.println ("您输入的数字不在范围内,请重新输入!");
} else {
shu[i] = b;
}
}
//创建字符串存放运算符
String[] op = {"+","-","*","/"};
//定义布尔型变量判断是否能实现结果
boolean flag = false;
//定义三个变量保存3次计算的结果
int a1, a2, a3;
System.out.println("可组成24的所有的组合为:");
//取出第一个数
for(int m=0;m<shu.length;m++)
{
//取出第二个数
for(int n=0;n<shu.length;n++)
{
//两数不相等
if(m!=n)
{
//第一个运算符
for(int x=0;x< op.length;x++)
{
a1=yunSuan (shu[m],shu[n],op[x]);
//取出第三个数
for(int p=0;p<shu.length;p++)
{
//三数不相等
if(p!=m&&p!=n)
{
//第二个运算符
for(int y=0;y< op.length;y++)
{
a2=yunSuan (a1,shu[p],op[y]);
//取出第四个数
for(int q=0;q<shu.length;q++)
{
//数字互不相等
if(q!=m&&q!=n&&q!=p)
{
//第三个运算符
for(int z=0;z< op.length;z++)
{
a3=yunSuan (a2,shu[q],op[z]);
if(a3==24)
{
System.out.println("("+"("+"("+shu[m]+op[x]+shu[n]+")"+op[y]+shu[p]+")"+op[z]+shu[q]+")");
flag=true;
}
}
}
}
}
}
}
}
}
}
}
if (flag == false)
System.out.println("不能实现24点!");
}
public static int yunSuan ( int i, int j, String op ) {
//使用equals判断运算符是否相等
if (op.equals ("+")) {
return i + j;
} else if (op.equals ("-")) {
return i - j;
} else if (op.equals ("*")) {
return i * j;
} else {
return i / j;
}
}
}
心得体会:
使用循环嵌套步骤复杂但思路简明,判断该使用哪个运算符时使用了equals()来做比较。