没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
24 点算法的 Java 版和 C 语言版源码
Java 版共 2 个类:Application.java 和 Node.java
== Application.java==
package num24;
public class Application {
double num[] = new double[4];
boolean mark[] = new boolean[4];
/**
* 获得 k 个数运算,结果为 result 的第一个 Node,比如 get(24,4)
* @param result
* @param n
* @return
*/
public Node get(double result, int n) {
Node left = null, right = null;
if (n <= 0) {
return null;
} //如果个数小于 0,返回空
for (int i = 0; i < 4; i++) {
if (mark[i]) {
continue; //如果已经打上标志,继续找下一个
}
mark[i] = true; //如果没有打标志,就打上标志,并且对其进行处理
//如果只有一个数并且这个数就是给出的结果,就返回一个只有一个数的节点
if (result == num[i] && n == 1) {
return new Node(num[i]);
}
left = get(result - num[i], n - 1);
if (left != null) {
return new Node(0.0, "+", left, new Node(num[i]));
}
left = get(result + num[i], n - 1);
if (left != null) {
return new Node(0.0, "-", left, new Node(num[i]));
}
left = get(result * num[i], n - 1);
if (left != null) {
return new Node(0.0, "/", left, new Node(num[i]));
}
if (Math.abs(num[i]) > 1e-10) {
left = get(result / num[i], n - 1);
if (left != null) {
return new Node(0.0, "*", left, new Node(num[i]));
}
}
for (int j = 0; j < 4; j++) {
if (mark[j]) {
continue;
}
mark[j] = true;
if (result == num[i] * num[j] && n == 2) { //a*b
return new Node(0.0, "*", new Node(num[i]), new Node(num[j]));
}
left = get(result + num[i] * num[j], n - 2); //a*b-(c?d)=result
if (left != null) {
right = new Node(0.0, "*", new Node(num[i]), new Node(num[j]));
return new Node(0.0, "-", left, right);
}
left = get(result - num[i] * num[j], n - 2); //a*b+(c?d)=result
if (left != null) {
right = new Node(0.0, "*", new Node(num[i]), new Node(num[j]));
return new Node(0.0, "+", left, right);
}
if (Math.abs(num[j]) > 1e-10) {
if (result == num[i] / num[j] && n == 2) {
return new Node(0.0, "/", new Node(num[i]), new Node(num[j]));
}
left = get(result + num[i] / num[j], n - 2); //a/b-(c?d)=result==>c?d=result+a/b
if (left != null) {
right = new Node(0.0, "/", new Node(num[i]), new Node(num[j]));
return new Node(0.0, "-", left, right);
}
left = get(result - num[i] / num[j], n - 2);
if (left != null) {
right = new Node(0.0, "/", new Node(num[i]), new Node(num[j]));
return new Node(0.0, "+", left, right);
}
}
if(result==num[i]-num[j]&&n==2){
return new Node(0.0,"-",new Node(num[i]),new Node(num[j]));
}
if(Math.abs(num[i]-num[j])>1e-10){
left=get(result/(num[i]-num[j]),n-2);
if(left!=null){
right=new Node(0.0,"-",new Node(num[i]),new Node(num[j]));
return new Node(0.0,"*",left,right);
}
}
mark[j]=false;
} //end for(int j...
mark[i]=false;
} //end for(int i...
return null;
}
public void output(Node node) {
if (node == null) {
return;
}
if (node.left != null) {
if ( (node.left.name.equals("+") || node.left.name.equals("-")) &&
(node.name.equals("*") || node.name.equals("/"))) {
System.out.print("(");
output(node.left);
System.out.print(")");
}
else {
output(node.left);
}
}
if (!node.name.trim().equals("")) {
System.out.print(node.name);
}
else {
System.out.print(node.num);
}
if (node.right != null) {
if (
(node.right.name.equals("+") || node.right.name.equals("-")) &&
(node.name.equals("*") || node.name.equals("/"))
剩余10页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功