您的位置:首页 > 其它

越南三年级数学题

2015-05-25 00:03 218 查看
      网上的 题目是这样的:

           


          越南保禄小学三年班,学生需要由上至下、从左到右的顺序,填入1至9的数字,可重复填写,并按先乘除后加减的运算法则,完成整条算式。

         在越南教育科学研究所修读博士学位的阮玉江则利用计算机程序,找出所有可能组合,结果竟“印满74张A4纸”。她称计算机能轻易计出答案,“但人脑肯定不容易”。其中        一 个正确的数字组合是1、1、1、1、1、3、7、9、1。

     听说难倒了很多人,我也喜欢小学生的题,感兴趣花3小时写了一个。第一次写博客,献丑了,再此虚心求教。

    大概思路是这样:计算公式:x1+(13*x2/x3)+x4+(12*x5)-x6-11+(x7*x8/x9)-10

         * 思路:

         * 1、需要填的九个空分别编号x1-x9,填法随意,隐含约束x9、x3不能为0(除数);

         * 2、将上式中三个括号提取出来分别计算,将结果存入3个HashMap(value:计算结果,key:value对应的所填数值的字符串,这样可以保证key值唯一)

         * 3、最后以三个map代替三个括号计算上式,直接打印值为66时x1-x9的值

         */

     下边上代码,新人勿喷

package com.li;

import java.util.HashMap;

import java.util.Map;

public class Eight8 {

    

    public static void main(String []args){

        //x1+(13*x2/x3)+x4+(12*x5)-x6-11+(x7*x8/x9)-10

        Map<String,Double> map1 = new HashMap<String,Double>();

        Map<String,Double> map2 = new HashMap<String,Double>();

        Map<String,Double> map3 = new HashMap<String,Double>();

        

        //第一个括号

        for(double x2=0;x2<=9;x2++){

            for(double x3=1;x3<=9;x3++){

                map1.put(",  x2="+x2+",  x3="+x3, 13*x2/x3);

            }

        }

        //第二个括号

        for(double x5=0;x5<=9;x5++){

            map2.put(",  x5="+x5, 12*x5);

        }

        //第三个括号

        for(double x7=0;x7<=9;x7++){

            for(double x8=0;x8<=9;x8++){

                for(double x9=1;x9<=9;x9++){

                    map3.put(",  x7="+x7+",  x8="+x8+",  x9="+x9, x7*x8/x9);

                }

            }

        }

        

        int temp = 1;

        //x1+(13*x2/x3)+x4+(12*x5)-x6-11+(x7*x8/x9)-10

        /**

         * 计算公式:x1+(13*x2/x3)+x4+(12*x5)-x6-11+(x7*x8/x9)-10

         * 思路:

         * 1、需要填的九个空分别编号x1-x9,填法随意,隐含约束x9、x3不能为0(除数);

         * 2、将上式中三个括号提取出来分别计算,将结果存入3个HashMap(value:计算结果,key:value对应的所填数值的字符串,这样可以保证key值唯一)

         * 3、最后以三个map代替三个括号计算上式,直接打印值为66时x1-x9的值

         */

        for(double x1=0;x1<=9;x1++){//核心

            for(String key1:map1.keySet()){

                for(double x4=0;x4<=9;x4++){

                    for(String key2:map2.keySet()){

                        for(double x6=0;x6<=9;x6++){

                            for(String key3:map3.keySet()){

                                

                                double num = x1+map1.get(key1)+x4+map2.get(key2)-x6-11+map3.get(key3)-10;

                                

                                if(num==66){//&&x1==1&&x4==1&&x6==3

                                    System.out.println(temp+":  x1="+x1+key1+",  x4="+x4+key2+",  x6="+x6+key3);

                                    temp++;

                                }

                                

                            }

                            

                        }

                    }

                    

                }

                

            }

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息