二十四点JAVA算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
package d5.te.c;
import java.util.HashSet; import java.util.Set;
public class twentyfour { public static void main(String[] args) { double[] num={3,9,2,1}; String[] expr={"3","9","2","1"}; int[] level={2,2,2,2}; com(num,expr,level); for(String o:hs) { System.out.println(o); } } static Set<String> hs=new HashSet<String>(); public static void com(double[] num,String[] expr,int[] level) { if(expr.length==1&&num[0]==24) { hs.add(expr[0]); return; } for(int i=0;i<num.length-1;i++) { for(int op=0;op<4;op++) { double[] nu=new double[num.length-1]; String[] ex=new String[expr.length-1]; int[] le=new int[level.length-1]; int count = 0; for(int j=0;j<num.length;j++) { if(j==i) { switch(op) { case 0://"+" nu[count]=num[j]+num[j+1]; ex[count]=expr[j]+"+"+expr[j+1]; le[count]=0; break;
case 1://"-" nu[count]=num[j]-num[j+1]; String te1=expr[j+1]; if(level[j+1]==0) { te1=add(expr[j+1]); } ex[count]=expr[j]+"-"+te1; le[count]=0; break;
case 3:/// nu[count]=num[j]/num[j+1]; String te4=expr[j]; String te5=expr[j+1]; if(level[j]==0) { te4=add(expr[j]); } if(level[j+1]!=2) { te5=add(expr[j+1]); } ex[count]=te4+"/"+te5; le[count]=1; break;
} j++; wk.baidu.com else
{ nu[count]=num[j]; ex[count]=expr[j]; le[count]=level[j];
} count++; } com(nu,ex,le); } } } public static String add(String s) { if(s.matches("[0-9]+(\\.[0-9]+)?")) { return s; } else { return "("+s+")"; } } }
case 2://* nu[count]=num[j]*num[j+1]; String te2=expr[j]; String te3=expr[j+1]; if(level[j]==0) { te2=add(expr[j]); } if(level[j+1]==0) { te3=add(expr[j+1]); } ex[count]=te2+"*"+te3; le[count]=1; break;
import java.util.HashSet; import java.util.Set;
public class twentyfour { public static void main(String[] args) { double[] num={3,9,2,1}; String[] expr={"3","9","2","1"}; int[] level={2,2,2,2}; com(num,expr,level); for(String o:hs) { System.out.println(o); } } static Set<String> hs=new HashSet<String>(); public static void com(double[] num,String[] expr,int[] level) { if(expr.length==1&&num[0]==24) { hs.add(expr[0]); return; } for(int i=0;i<num.length-1;i++) { for(int op=0;op<4;op++) { double[] nu=new double[num.length-1]; String[] ex=new String[expr.length-1]; int[] le=new int[level.length-1]; int count = 0; for(int j=0;j<num.length;j++) { if(j==i) { switch(op) { case 0://"+" nu[count]=num[j]+num[j+1]; ex[count]=expr[j]+"+"+expr[j+1]; le[count]=0; break;
case 1://"-" nu[count]=num[j]-num[j+1]; String te1=expr[j+1]; if(level[j+1]==0) { te1=add(expr[j+1]); } ex[count]=expr[j]+"-"+te1; le[count]=0; break;
case 3:/// nu[count]=num[j]/num[j+1]; String te4=expr[j]; String te5=expr[j+1]; if(level[j]==0) { te4=add(expr[j]); } if(level[j+1]!=2) { te5=add(expr[j+1]); } ex[count]=te4+"/"+te5; le[count]=1; break;
} j++; wk.baidu.com else
{ nu[count]=num[j]; ex[count]=expr[j]; le[count]=level[j];
} count++; } com(nu,ex,le); } } } public static String add(String s) { if(s.matches("[0-9]+(\\.[0-9]+)?")) { return s; } else { return "("+s+")"; } } }
case 2://* nu[count]=num[j]*num[j+1]; String te2=expr[j]; String te3=expr[j+1]; if(level[j]==0) { te2=add(expr[j]); } if(level[j+1]==0) { te3=add(expr[j+1]); } ex[count]=te2+"*"+te3; le[count]=1; break;