zoukankan      html  css  js  c++  java
  • 《java编程思想》读后笔记:二,吸血鬼数字

    书本p75中一道读后练习思考题,题目如下:

      吸血鬼数字是指位数为偶数的数字,可以有一对数字相乘得到,而这对数字各包含成绩的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。一两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼数字”:

      1260=21*60,1827=21*87,2187=27*81

     写一个程序,找出4位数的所有吸血鬼数字。

    个人代码:

    public static void main(String[] args) {
            Map<String,String> map = new HashMap<String,String>();
            for (Integer i = 10; i < 100; i++) {        //两个数一定都是两位数
                for (Integer j = 10; j < 100; j++) {
                    Integer total = i * j;            //计算乘积
                    if(total>999 && total<10000){        //判断是否是4位数
                        String totalStr = total.toString();  //将当前数字转成字符串
                        if(total % 100 != 0){          //排除以两个0结尾的情况
                            String iStr = i.toString();
                            String jStr = j.toString();
                            String ijStr = iStr + jStr;    //将当前俩个数拼成4个字符的字符串
                            List<Character> list = new ArrayList<Character>();
                            for(int x=0;x<totalStr.length();x++){
                                list.add(totalStr.charAt(x));  //将两数乘积的四个数字放入list中
                            }
                            int state = 0;
                            for(int x=0;x<ijStr.length();x++){
                                if(list.contains(ijStr.charAt(x))){      //遍历两数组成的字符串每个数字
                                    int indexX = list.indexOf(ijStr.charAt(x));  //当list中含有当前数字时,从list中删除当前数字字符
                                    list.remove(indexX);                //并且记录重复数字
                                    state ++;    
                                }
                            }
                            if(state == 4){
                                String resultStr = totalStr + " = " + iStr + "*" + jStr;  //state==4说明,乘积中含有两个数组成的所有数字字符
                                map.put(totalStr, resultStr);          //以乘积为key,等式为value存入,达到去重效果
                            }
                        }
                    }
                }
            }
            Set<String> keySet = map.keySet();
            for(String key:keySet){
                System.out.println(map.get(key));    //打印结果
            }
        }

    输出结果:

    1435 = 41*35
    1260 = 60*21
    2187 = 81*27
    1395 = 93*15
    1530 = 51*30
    6880 = 86*80
    1827 = 87*21

    我的解决代码如上,暂时还没想到更简便的解决方案,如果朋友感兴趣,可以多交流。

  • 相关阅读:
    jQuery EasyUI API 中文文档 数字框(NumberBox)
    jQuery EasyUI API 中文文档 数值微调器(NumberSpinner)
    jQuery EasyUI API 中文文档 日期时间框(DateTimeBox)
    jQuery EasyUI API 中文文档 微调器(Spinner)
    jQuery EasyUI API 中文文档 树表格(TreeGrid)
    jQuery EasyUI API 中文文档 树(Tree)
    jQuery EasyUI API 中文文档 属性表格(PropertyGrid)
    EntityFramework 数据操作
    jQuery EasyUI API 中文文档 对话框(Dialog)
    jQuery EasyUI API 中文文档 组合表格(ComboGrid)
  • 原文地址:https://www.cnblogs.com/don9/p/6753102.html
Copyright © 2011-2022 走看看