www3748开奖结果怎么算24点

算24点经典题目_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
算24点经典题目
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩13页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
3 4 4 4 算24点怎么算?
扫二维码下载作业帮
2亿+学生的选择
(3加4)乘4减4
为您推荐:
其他类似问题
扫描下载二维码博客分类:
这是本人2年前业余时间写的application版本的24点游戏的简单实现。共享出来,希望能起到抛砖引玉的作用,一起探讨24点的实现。
1、计算方式的改变——引入分数计算概念
求24点涉及到除法,所以必须转变直接计算的思路。经过一段时间的摸索,本人发现可以采用分数计算。任何两个数的计算都可以转换成对应的分数计算形式。
例如:3 / 8 可以转换成 (3/1) / (8/1)
1.1 待计算数字的初始化
于是待计算的4个值必须先转换成分数:
private int[] aArray = new int[2];
private int[] bArray = new int[2];
private int[] cArray = new int[2];
private int[] dArray = new int[2];
当然,我们得初始化它们: 效果就是2->2/ 1
aArray[0] =
aArray[1] = 1;
bArray[0] =
bArray[1] = 1;
cArray[0] =
cArray[1] = 1;
dArray[0] =
dArray[1] = 1;
1.2 分数的计算
小学的时候就学过,分数的加减法用到最小公倍数和最大公约数。
* 求最小公倍数
* @param a
* @param b
public int leaseCommonMultiple(int a, int b) {
return a * b / greatestCommonDivisor(a, b);
* 求最大公约数
* @param a
* @param b
public int greatestCommonDivisor(int a, int b) {
if (0 == a && 0 == b) {
if (0 == a) {
if (0 == b) {
if (a & b) {
for (int c = a % c & 0; c = a % b) {
对应的加减方法如下:
public int[] plus(int[] a, int[] b) {
if (0 == a[1]) {
return new int[] { 0, 0 };
if (0 == b[1]) {
return new int[] { 0, 0 };
int denominator = leaseCommonMultiple(a[1], b[1]);
return new int[] {
denominator / a[1] * a[0] + denominator / b[1] * b[0],
denominator };
* @param a
* @param b
public int[] reduce(int[] a, int[] b) {
if (0 == a[1]) {
return new int[] { 0, 0 };
if (0 == b[1]) {
return new int[] { 0, 0 };
int denominator = leaseCommonMultiple(a[1], b[1]);
return new int[] {
denominator / a[1] * a[0] - denominator / b[1] * b[0],
denominator };
相对来说,乘除方法就简单多了:
* @param a
* @param b
public int[] multiply(int[] a, int[] b) {
return new int[] { a[0] * b[0], a[1] * b[1] };
* @param a
* @param b
public int[] divide(int[] a, int[] b) {
return new int[] { a[0] * b[1], a[1] * b[0] };
2、计算规则
2.1 算法——穷举法
24点的计算涉及到以下三种元素:
待计算的4个数、三个计算符号(加减乘除)、括号
本人采用的是穷举法,进行一个一个数值和符号的尝试——这样的话,在循环中数值和符号都必须是动态的。
* 动态加载符号数
* @param i
* @param a
* @param b
int[] dispose(int i, int a[], int[] b){
if(i == 0){
return plus(a, b);
}else if(i == 1){
return reduce(a, b);
}else if(i == 2){
return multiply(a, b);
return divide(a, b);
* 动态加载计算数
* @param i
* @param a
* @param b
* @param c
* @param d
public int[] number(int i, int[] a, int[] b, int[] c, int[] d){
if(i == 0){
}else if(i == 1){
}else if(i == 2){
}else if(i == 3){
return new int[]{0,1};
2.2 括号规则:
类型1:A(A(A(a,b),c),d)
类型2:A(A(a,A(b,c)),d)
类型3:A(a,A(b,A(c,d)))
类型4:A(a,A(A(b,c),d))
类型5:A(A(a,b),A(c,d))
注:A就是1个符号,A(a,b)就是指:a+b, a-b, a*b, a/b四种情况
2.3 数值与符号的穷举
把每个数值和符号一个进行尝试:
for(int i = 0; i & 4; i++){
for(int j = 0; j & 4; j++){
for(int k = 0; k & 4; k++){
for(int m = 0; m & 4; m++){
for(int n = 0; n & 4; n++){
if(n == m)
for(int o = 0; o & 4; o++){
if(o == m || o == n)
for(int p = 0; p & 4; p++){
if(p == m || p == n || p == o)
。。。计算方法。。。
计算方法:
//类型1:A(A(A(a,b),c),d)
int[] result1 = dispose(k,dispose(j,dispose(i,number(m,a,b,c,d),number(n,a,b,c,d)),number(o,a,b,c,d)),number(p,a,b,c,d));
//类型2:A(A(a,A(b,c)),d)
int[] result2 = dispose(k,dispose(i,number(m,a,b,c,d),dispose(j,number(n,a,b,c,d),number(o,a,b,c,d))),number(p,a,b,c,d));
//类型3:A(a,A(b,A(c,d)))
int[] result3 = dispose(i,number(m,a,b,c,d),dispose(j,number(n,a,b,c,d),dispose(k,number(o,a,b,c,d),number(p,a,b,c,d))));
//类型4:A(a,A(A(b,c),d))
int[] result4 = dispose(i,number(m,a,b,c,d),dispose(k,dispose(j,number(n,a,b,c,d),number(o,a,b,c,d)),number(p,a,b,c,d)));
//类型5:A(A(a,b),A(c,d))
int[] result5 = dispose(j,dispose(i,number(m,a,b,c,d),number(n,a,b,c,d)),dispose(k,number(o,a,b,c,d),number(p,a,b,c,d)));
if (0 != result1[1]) {
if (result1[0] % result1[1] == 0) {
if (result1[0] / result1[1] == 24) {
if ((!map.containsKey(new Integer(i)))|| (!map.containsKey(new Integer(j)))|| (!map.containsKey(new Integer(k)))) {
map.put(new Integer(i),new Integer(i));
map.put(new Integer(j),new Integer(j));
map.put(new Integer(k),new Integer(k));
count += 1;
System.out.println("((" + printNumber(m) + printSymbol(i) + printNumber(n) + ")" + printSymbol(j) + printNumber(o) + ")" + printSymbol(k) + printNumber(p));
if (0 != result2[1]) {
if (result2[0] % result2[1] == 0) {
if (result2[0] / result2[1] == 24) {
if ((!map.containsKey(new Integer(i)))|| (!map.containsKey(new Integer(j)))|| (!map.containsKey(new Integer(k)))) {
map.put(new Integer(i),new Integer(i));
map.put(new Integer(j),new Integer(j));
map.put(new Integer(k),new Integer(k));
count += 1;
System.out.println("(" + printNumber(m) + printSymbol(i) +"(" + printNumber(n) + printSymbol(j) + printNumber(o) + "))" + printSymbol(k) + printNumber(p));
if (0 != result3[1]) {
if (result3[0] % result3[1] == 0) {
if (result3[0] / result3[1] == 24) {
if ((!map.containsKey(new Integer(i))) || (!map.containsKey(new Integer(j)))|| (!map.containsKey(new Integer(k)))) {
map.put(new Integer(i),new Integer(i));
map.put(new Integer(j),new Integer(j));
map.put(new Integer(k),new Integer(k));
count += 1;
System.out.println(printNumber(m) + printSymbol(i) +"(" + printNumber(n) + printSymbol(j) + "(" + printNumber(o) +
printSymbol(k) + printNumber(p) + "))");
if (0 != result4[1]) {
if (result4[0] % result4[1] == 0) {
if (result4[0] / result4[1] == 24) {
.containsKey(new Integer(i)))|| (!map.containsKey(new Integer(j)))|| (!map.containsKey(new Integer(k)))) {
map.put(new Integer(i),new Integer(i));
map.put(new Integer(j),new Integer(j));
map.put(new Integer(k),new Integer(k));
count += 1;
System.out.println(printNumber(m) + printSymbol(i) +"((" + printNumber(n) + printSymbol(j) + printNumber(o) + ")" +
printSymbol(k) + printNumber(p) + ")");
if (0 != result5[1]) {
if (result5[0] % result5[1] == 0) {
if (result5[0] / result5[1] == 24) {
if ((!map.containsKey(new Integer(i)))|| (!map.containsKey(new Integer(j)))|| (!map.containsKey(new Integer(k)))) {
map.put(new Integer(i),new Integer(i));
map.put(new Integer(j),new Integer(j));
map.put(new Integer(k),new Integer(k));
count += 1;
System.out.println("(" + printNumber(m) + printSymbol(i) + printNumber(n) + ")" + printSymbol(j) + "(" + printNumber(o) + printSymbol(k) + printNumber(p) + ")");
该程序目前存在的一些问题:
1)、存在括号多余的情况——如:1 + (2 + (3 * 7))和((2 + 7) - 1) * 3
2)、结果打印耦合在核心计算方法中
描述: 源代码
下载次数: 141
浏览: 117256 次
来自: 北京
快速升级 --&应该是快速更新吧
你们辛苦了,但是现在感觉好乱
先感谢你们的付出,,但能不能换个字体,,太伤眼了。
顶 一 下 !!!!!!!!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 www3748开奖结果 的文章

 

随机推荐