24 点游戏---转载
来源:互联网 发布:认识vb编程软件教案 编辑:程序博客网 时间:2024/04/28 16:29
/**
* 他的主要想法是
* 先对四个数中的任意两个数进行四则运算,得到的结果加剩余的两个数还有三个数
* 再对三个数中的任意两个数进行四则运算,得到的结果加剩余的一个数还有二个数
* 再对剩余的两个数进行四则运算,得到的结果如果是24,就说明该表达式能得到24,表达式正确;
* 如果结果不是24,则说明表达式不正确
* @param n
* @return
*/
public boolean is24(int n) {
if (n == 1)
return (Math.abs(number[0] - 24) < EPISON);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) { // 进行组合
double a, b;
String expa, expb;
a = number[i]; // 保存起来,在方法最后再恢复,以便继续计算
b = number[j]; // 保存起来,在方法最后再恢复,以便继续计算
number[j] = number[n - 1]; // 将最后一个数挪过来
expa = exp[i]; // 保存起来,在方法最后再恢复,以便继续计算
expb = exp[j]; // 保存起来,在方法最后再恢复,以便继续计算
exp[j] = exp[n - 1]; // 将最后一个式子挪过来j'
exp[i] = "(" + expa + "+" + expb + ")"; // 看看加法能否算出,如果能算出,返回true
number[i] = a + b;
if (is24(n - 1))
return true;
exp[i] = "(" + expa + "-" + expb + ")"; // 看看减法能否算
number[i] = a - b;
if (is24(n - 1))
return true;
exp[i] = "(" + expb + "-" + expa + ")";
number[i] = b - a;
if (is24(n - 1))
return true;
exp[i] = "(" + expa + "*" + expb + ")"; // 看看乘法能否算
number[i] = a * b;
if (is24(n - 1))
return true;
if (b != 0) {
exp[i] = "(" + expa + "/" + expb + ")"; // 看看除法能否算
number[i] = a / b;
if (is24(n - 1))
return true;
}
if (a != 0) {
exp[i] = "(" + expb + "/" + expa + ")";
number[i] = b / a;
if (is24(n - 1))
return true;
}
//如果以上的加、减、乘、除都不能得到有效的结果,则恢复数据进行下一轮的计算。
number[i] = a; // 恢复
number[j] = b;
exp[i] = expa;
exp[j] = expb;
}
}
return false;
}
* 他的主要想法是
* 先对四个数中的任意两个数进行四则运算,得到的结果加剩余的两个数还有三个数
* 再对三个数中的任意两个数进行四则运算,得到的结果加剩余的一个数还有二个数
* 再对剩余的两个数进行四则运算,得到的结果如果是24,就说明该表达式能得到24,表达式正确;
* 如果结果不是24,则说明表达式不正确
* @param n
* @return
*/
public boolean is24(int n) {
if (n == 1)
return (Math.abs(number[0] - 24) < EPISON);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) { // 进行组合
double a, b;
String expa, expb;
a = number[i]; // 保存起来,在方法最后再恢复,以便继续计算
b = number[j]; // 保存起来,在方法最后再恢复,以便继续计算
number[j] = number[n - 1]; // 将最后一个数挪过来
expa = exp[i]; // 保存起来,在方法最后再恢复,以便继续计算
expb = exp[j]; // 保存起来,在方法最后再恢复,以便继续计算
exp[j] = exp[n - 1]; // 将最后一个式子挪过来j'
exp[i] = "(" + expa + "+" + expb + ")"; // 看看加法能否算出,如果能算出,返回true
number[i] = a + b;
if (is24(n - 1))
return true;
exp[i] = "(" + expa + "-" + expb + ")"; // 看看减法能否算
number[i] = a - b;
if (is24(n - 1))
return true;
exp[i] = "(" + expb + "-" + expa + ")";
number[i] = b - a;
if (is24(n - 1))
return true;
exp[i] = "(" + expa + "*" + expb + ")"; // 看看乘法能否算
number[i] = a * b;
if (is24(n - 1))
return true;
if (b != 0) {
exp[i] = "(" + expa + "/" + expb + ")"; // 看看除法能否算
number[i] = a / b;
if (is24(n - 1))
return true;
}
if (a != 0) {
exp[i] = "(" + expb + "/" + expa + ")";
number[i] = b / a;
if (is24(n - 1))
return true;
}
//如果以上的加、减、乘、除都不能得到有效的结果,则恢复数据进行下一轮的计算。
number[i] = a; // 恢复
number[j] = b;
exp[i] = expa;
exp[j] = expb;
}
}
return false;
}
0 0
- 24 点游戏---转载
- 24点游戏代码
- 24点游戏
- 24点扑克牌游戏
- 24点游戏
- 24点游戏
- 《24点游戏》
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏源码
- 24点游戏
- 24点游戏-hero
- 24点游戏
- 【web开发学习笔记】Structs2 Result学习笔记(二)动态结果集
- hdu 1250 Hat's Fibonacci
- 学习总结十六:hadoop安全模式
- MFCC特征提取详细计算过程
- ZOJ 3529 A Game Between Alice and Bob(博弈论-sg函数)
- 24 点游戏---转载
- hashCode与equals的区别与联系
- 数字签名是什么?
- POJ 2485 Highways
- ZOJ_1462 Team Them Up! 求完连通分量后,再进行背包,之后背包路径回溯
- n皇后---转载
- C/C++_lesson_10_静态函数、函数指针、友元、操作符重载
- SSL/TLS协议运行机制的概述
- 水仙花数--转载