如题,最好有详细代码,麻烦大家了。

解决方案 »

  1.   

    sixme(子曾经曰过:“基础和算法才素王道”。) :
    你写写看。
    我看你有长进没有~
      

  2.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    public class game24 implements ActionListener
    {
    JTextField num1;
    JTextField num2;
    JTextField num3;
    JTextField num4;
    JLabel string1;
    JLabel string2;
    JLabel string3;
    JLabel string4;
    JButton button;
    JLabel label;
    JPanel panel;
    int[] store; public static void main(String[] args){
    JFrame frame=new JFrame("算24点");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new FlowLayout()); game24 mygame=new game24();
    mygame.num1=new JTextField(12);
    mygame.num2=new JTextField(12);
    mygame.num3=new JTextField(12);
    mygame.num4=new JTextField(12);
    mygame.string1=new JLabel("数字1:");
    mygame.string2=new JLabel("数字2:");
    mygame.string3=new JLabel("数字3:");
    mygame.string4=new JLabel("数字4:");
    mygame.button=new JButton("计算");
    mygame.label=new JLabel();
    mygame.panel=new JPanel();
    mygame.button.addActionListener(mygame); frame.add(mygame.string1);
    frame.add(mygame.num1);
    frame.add(mygame.string2);
    frame.add(mygame.num2);
    frame.add(mygame.string3);
    frame.add(mygame.num3);
    frame.add(mygame.string4);
    frame.add(mygame.num4);
    mygame.panel.setLayout(new GridLayout(2,1));
    mygame.panel.add(mygame.button);
    mygame.panel.add(mygame.label);
    frame.add(mygame.panel);
    //frame.add(mygame.button);
    //frame.add(mygame.label); mygame.store=new int[4]; frame.setSize(200,220);
    frame.setVisible(true);
    } public void actionPerformed(ActionEvent e){
    Double[] a=new Double[4];
    a[0]=Double.valueOf(num1.getText());
    a[1]=Double.valueOf(num2.getText());
    a[2]=Double.valueOf(num3.getText());
    a[3]=Double.valueOf(num4.getText());
    if(!result(a)){
    label.setText("无解");
    label.validate();
    }
    //System.out.println(Integer.valueOf(num1.getText()));
    } public boolean result(Double a[]){
    Double[] b=new Double[4];
    for(int i=0;i<4;i++){
    for(int j=0;j<4;j++){
    for(int k=0;k<4;k++){
    if(i==j||k==i||k==j){
    continue;
    }
    b[0]=a[i];
    b[1]=a[j];
    b[2]=a[k];
    b[3]=a[6-i-j-k];
    if(four(b)){
    showresult(b,store);
    return true;
    }
    }
    }
    }
    return false;
    } public boolean four(Double[] a){
    Double[] b1=two(a[0],a[1]);
    Double[] b2=two(a[2],a[3]);
    //(a+b)+(c+d)
    for(int i=0;i<4;i++){
    for(int j=0;j<4;j++){
    Double[] b3=two(b1[i],b2[j]);
    for(int k=0;k<4;k++){
    //if(b3[k]==24.0){
    if(Math.abs(b3[k]-24)<Math.exp(-6)){
    store[0]=1;
    store[1]=i;
    store[2]=k;
    store[3]=j;
    return true;
    }
    }
    }
    }
    //((a+b)+c)+d
    for(int i=0;i<4;i++){
    Double[] b4=two(b1[i],a[2]);
    for(int j=0;j<4;j++){
    Double[] b5=two(b4[j],a[3]);
    for(int k=0;k<4;k++){
    //if(b5[k]==24.0){
    if(Math.abs(b5[k]-24)<Math.exp(-6)){
    store[0]=2;
    store[1]=i;
    store[2]=j;
    store[3]=k;
    return true;
    }
    }
    }
    }
    //(a+(b+c))+d
    Double[] b6=two(a[1],a[2]);
    for(int i=0;i<4;i++){
    Double[] b3=two(a[0],b6[i]);
    for(int j=0;j<4;j++){
    Double[] b4=two(b3[j],a[3]);
    for(int k=0;k<4;k++){
    if(Math.abs(b4[k]-24)<Math.exp(-6)){
    store[0]=3;
    store[1]=j;
    store[2]=i;
    store[3]=k;
    return true;
    }
    }
    }
    }
    //a+((b+c)+d)
    for(int i=0;i<4;i++){
    Double[] b3=two(b6[i],a[3]);
    for(int j=0;j<4;j++){
    Double[] b4=two(a[0],b3[j]);
    for(int k=0;k<4;k++){
    if(Math.abs(b4[k]-24)<Math.exp(-6)){
    store[0]=4;
    store[1]=k;
    store[2]=i;
    store[3]=j;
    return true;
    }
    }
    }
    }
    //a+(b+(c+d))
    for(int i=0;i<4;i++){
    Double[] b3=two(a[1],b2[i]);
    for(int j=0;j<4;j++){
    Double[] b4=two(a[0],b3[j]);
    for(int k=0;k<4;k++){
    if(Math.abs(b4[k]-24)<Math.exp(-6)){
    store[0]=5;
    store[1]=k;
    store[2]=j;
    store[3]=i;
    return true;
    }
    }
    }
    }
    return false;
    } public Double[] two(Double a,Double b){
    Double[] c=new Double[4];
    c[0]=a+b;
    c[1]=a-b;
    c[2]=a*b;
    if(b==0){
    b=-1000.0;
    }
    c[3]=a/b;
    return c;
    } public void showresult(Double paramnum[],int operation[]){
    int[] num=new int[4];
    for(int i=0;i<4;i++){
    num[i]=paramnum[i].intValue();
    } String[] stringopration=new String[3];
    for(int i=0;i<3;i++){
    if(operation[i+1]==0)stringopration[i]="+";
    if(operation[i+1]==1)stringopration[i]="-";
    if(operation[i+1]==2)stringopration[i]="*";
    if(operation[i+1]==3)stringopration[i]="/";
    }

    String text=new String();
    if(operation[0]==1){//(a+b)+(c+d)
    text="("+String.valueOf(num[0])+stringopration[0]+String.valueOf(num[1])+")"+stringopration[1]+"("+String.valueOf(num[2])+stringopration[2]+String.valueOf(num[3])+")=24";
    }else if(operation[0]==2){//((a+b)+c)+d
    text="(("+String.valueOf(num[0])+stringopration[0]+String.valueOf(num[1])+")"+stringopration[1]+String.valueOf(num[2])+")"+stringopration[2]+String.valueOf(num[3])+"=24";
    }else if(operation[0]==3){//(a+(b+c))+d
    text="("+String.valueOf(num[0])+stringopration[0]+"("+String.valueOf(num[1])+stringopration[1]+String.valueOf(num[2])+"))"+stringopration[2]+String.valueOf(num[3])+"=24";
    }else if(operation[0]==4){//a+((b+c)+d)
    text=String.valueOf(num[0])+stringopration[0]+"(("+String.valueOf(num[1])+stringopration[1]+String.valueOf(num[2])+")"+stringopration[2]+String.valueOf(num[3])+")=24";
    }else if(operation[0]==5){//a+(b+(c+d))
    text=String.valueOf(num[0])+stringopration[0]+"("+String.valueOf(num[1])+stringopration[1]+"("+String.valueOf(num[2])+stringopration[2]+String.valueOf(num[3])+"))=24";
    } System.out.println(text);
    label.setText(text);
    label.validate();
    /*System.out.println(operation[0]);
    System.out.print(num[0]);
    for(int i=1;i<4;i++){
    if(operation[i]==0)System.out.print("+");
    if(operation[i]==1)System.out.print("-");
    if(operation[i]==2)System.out.print("*");
    if(operation[i]==3)System.out.print("/");
    System.out.print(num[i]);
    }*/
    }
    };jdk1.5