24点游戏规则:任取1-9之间的4个数字,用+-*/()连结成算式,使得式子的计算结果为24。估计很多人都玩过用扑克牌玩的那种,印象中10也算在内的,两人各出2张牌,谁先算出来谁赢,赢家收回已经算过的4张牌。最后看谁手里的牌多。
这个程序实现使用穷举的方法,将所有可能的排列穷举出来,最后将每个排列中计算出结果。计算结果时,将前两个作为一组、后两个数作为一组,分别计算出各组的结果,再对获得的两个组结果进行计算。由于是排列,分前后两组进行计算就可满足所有可能的计算。
改进后的代码见回复中。
package fun.twentyfour;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TwentyFour {
public static void main(String[] args){
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line;
try{
while((line=br.readLine())!=null){
try{
if ("exit".equals(line)) break;
String[] s=line.split("\\s");
int[] v=new int[4];
for(int idx=0;idx<4;idx++) {
v[idx]=Integer.parseInt(s[idx]);
if (v[idx]<=0||v[idx]>=10) throw new Exception("Input error.");
}
evaluate(v);
}catch(Exception ex){
ex.printStackTrace();
}
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void evaluate(int[] v){
int idx=0;
for(int a=0;a<4;a++)
for(int b=0;b<4;b++)
for (int c=0;c<4;c++)
for (int d=0;d<4;d++){
if (a!=b && a!=c && a!=d && b!=c && b!=d && c!=d){
idx++;
check(v,new int[]{a,b,c,d});
}
}
}
static char[] op={'+','-','*','/'};
public static void check(int[] v,int[] idx){
for(int o=0;o<4;o++){
for(int p=0;p<4;p++){
for(int t=0;t<4;t++){
if (op(op[p],op(op[o],v[idx[0]],v[idx[1]]),op(op[t],v[idx[2]],v[idx[3]]))==24){
System.out.println(String.format("(%1$d %2$c %3$d) %4$c (%5$d %6$c %7$d)",
v[idx[0]],op[o],v[idx[1]],op[p],v[idx[2]],op[t],v[idx[3]]));
}
}
}
}
}
public static int op(char op,int v1,int v2){
switch(op){
case '+':
return v1+v2;
case '-':
return v1-v2;
case '*':
return v1*v2;
case '/':
if (v2==0) return -111;
if (v1%v2!=0) return -111;
return v1/v2;
default:
return 0;
}
}
}
分享到:
相关推荐
以知识点为中心,《小学生C++趣味编程》适D地弱化语法,注重算法。利用流程图厘清思路,激发学习兴趣,培养计算思维。 本资源为官方正版配套教学资源,包含: 1)全书涉及的所有源代码(包含完整代码和不完整代码[即...
"Python趣味编程100例(99个)"这个资源显然是为了帮助初学者通过一系列有趣的实践例子来学习Python编程。 在Python编程中,基础是非常重要的。例如,了解变量的声明和使用,数据类型如整型(int)、浮点型(float)、...
标题《青少年趣味编程Python系列课程--2019-09-23》以及描述《青少年趣味编程Python系列课程--2019-09-23》揭示了该文件是一份针对青少年的Python编程课程计划,时间为2019年9月23日。文档的标签为“python学习 系列...
《Scratch趣味编程》 《Scratch趣味编程》是一种图形化的编程语言,由美国麻省理工学院研发,可以轻松地创建自己互动故事、动画、游戏、音乐和艺术。 Scratch将程序语言设计成一块块积木,你只要用拖拉的方式,将...
C++趣味编程是一门引人入胜的课程,旨在帮助初学者理解编程基础,并通过实践探索编程的乐趣。在这个配套课件中,我们将深入探讨C++语言的各个方面,使其成为掌握编程概念的有效工具。 首先,我们要了解C++的基本...
标题中的“趣味矩阵算法实现源代码”意味着我们将探讨一种用编程语言实现的,能够打印或操作特定模式矩阵的方法。这可能包括递归、循环或其他控制结构,以按照预设的规则填充和展示矩阵。 描述中的“算法分析与设计...
标题中的“小学生C++趣味编程 C++源代码(2021.11.22).rar”表明这是一个专为小学生设计的C++编程学习资源包,包含了2021年11月22日更新的源代码。这个资源旨在以有趣的方式介绍C++编程基础,帮助孩子们在早期阶段...
24点游戏是一种深受人们喜爱的智力挑战游戏,它的...总的来说,24点游戏的算法实现是一个涉及排列组合、数学运算和递归编程的有趣课题。通过学习和实践,我们可以不仅提高编程技巧,还能增强逻辑推理和问题解决能力。
《小学生C++趣味编程》是一本面向初学者,特别是小学生的教材,旨在通过结合C++编程语言和Scratch可视化编程工具,激发孩子们对编程的兴趣。该书内容涵盖基础的编程概念,逐步引导学生掌握编程思维和技能。以下是书...
### Python算法趣味题目详解 #### 题目背景与概述 本文将介绍并解析两道有趣的Python算法题目,旨在帮助读者更好地理解Python语言的特点及其在处理字符串方面的优势。通过具体的示例代码,我们将深入探讨Python...
《Python趣味编程100例》是一份专为Python初学者设计的学习资源,它通过100个精心挑选的编程实例,旨在帮助新手快速掌握Python编程的基础知识和实践技巧。这个压缩包包含了丰富的源代码,并且每个示例都有详细的注释...
第二部分是算法进阶,详细介绍了几个经典的算法问题及其对应的Scratch实现。这些问题包括约瑟夫环问题、最长回文子串、0/1背包问题、拓扑排序等。通过这些实例,读者可以深入理解算法的本质和实现方法,提高解决问题...
本书取材注重趣味性与实用性,内容涵盖了Java编程的基础知识和常用算法,讲解时给出了实例的详细代码及注释。本书附带1张光盘,收录了本书配套多媒体教学视频及实例源文件,可大大方便读者高效、直观地学习本书内容...
Scratch 编程入门与算法进阶 Scratch 是一款为青少年设计的编程语言和平台,由麻省理工学院的媒体实验室(Media Lab)和哈佛大学的实验室(Graduate School of Education)联合开发。Scratch 的起源与发展可以追溯...
"编"玩边学:Scratch趣味编程进阶妙趣横生的数学和算法 《“编”玩边学:Scratch趣味编程进阶妙趣横生的数学和算法》是一本旨在通过Scratch编程语言教授数学和算法知识的书籍。这本书的内容丰富、生动有趣,适合中...
《C/C++趣味编程100例》一书精选了100个经典、实用且充满趣味性的程序设计实例,旨在通过实践加深读者对C/C++语言的理解与掌握。本书覆盖了从基本图形绘制到复杂算法实现的广泛内容,不仅适合初学者入门,也能够帮助...
本文主要探讨了如何利用Scratch趣味编程与Pascal语言的互动教学方法,以提高小学生对编程的理解和兴趣。以下是对标题和描述中关键知识点的详细说明: 1. **Scratch趣味编程**:Scratch是一种面向儿童的图形化编程...
"趣味编程百例"是一个可能包含一系列有趣且富有挑战性的编程练习的集合,旨在帮助学习者提高编程技能,同时享受编程的乐趣。这些编程题目通常涵盖了基础到进阶的各种难度,适合不同程度的程序员进行实践和提升。 在...
6. **位操作**:Java的位操作可以用于高效地处理二进制数据,如快速幂运算、奇偶性检查等,是实现一些趣味算法的有效手段。 7. **模拟算法**:模拟真实世界的情况,如抛硬币、抽卡等概率问题,可以通过Java程序进行...
在标题“JAVA趣味编程100实例”下,描述中提到“很实用的java趣味编程小程序”,这说明本文件旨在通过有趣的编程实例来帮助学习者加深对Java语言的理解和应用能力。通过解决实际问题来提高编程技能,这些实例很可能...