当前位置: 代码迷 >> Java相关 >> 简单数学题
  详细解决方案

简单数学题

热度:360   发布时间:2010-06-29 16:21:52.0
简单数学题
口/口口+口/口口+口/口口=1

其中每个口的值都介于1~9

但每个口的值都不相同
搜索更多相关的解决方案: 数学题  

----------------解决方案--------------------------------------------------------
其实用个排列加上一些优化,应该就可以得到答案了。不过现在没时间,嘿嘿,明天有时间的时候再做做看
----------------解决方案--------------------------------------------------------
该式子表示为:a[3]/a[1]a[2]+a[6]/a[4]a[5]+a[9]/a[7]a[8]并且a[3]/a[1]a[2]>a[6]/a[4]a[5]>a[9]/a[7]a[8]
那么根据推算,a[1]必须为1(假如为2,那么最大值为9/21+8/35+7/46<1)
程序代码:
public class Perm {
    private int[] a = new int[10];
   
    private void init(){
        for(int i=1;i<=9;i++){
            a[i]=i;   
        }
    }
   
    private boolean juge(){
        int k1 = a[1]*10+a[2];
        int k2 = a[4]*10+a[5];
        int k3 = a[7]*10+a[8];
        int t1 =a[3]*k2*k3;
        int t2=a[6]*k1*k3;
        int t3=a[9]*k1*k2;
        boolean b = false;
        if(t1>t2&&t2>t3&&t1+t2+t3==k1*k2*k3)
            b=true;
        return b;
    }
   
    private void printNumber(){
        for(int j=1;j<=9;j++){
            System.out.print(a[j]+" ");
        }
        System.out.println();
    }
   
    private void range(int index){
        if(index==9&&juge()){
            printNumber();
        }
        else{
            for(int i=index;i<=9;i++){
                int k = index;
                swap(i,k);
                range(k+1);               
                swap(i,k);
            }      
        }
    }
   
    private void swap(int i, int j){
        int temp =a[i];
        a[i]=a[j];
        a[j]=temp;
    }
   
    public static void main(String[] args) {
        Perm p = new Perm();
        p.init();
        p.range(2);   
    }
}
运行了一下,速度不慢,我就不去优化了。结果为 1 2 9 3 4 5 6 8 7 ,也就是9/12+5/34+7/68=1

----------------解决方案--------------------------------------------------------
  相关解决方案