• 按照年份计算十全时的个数


    题目:
    假如电子计时器所显示的十个数字是“1115093028”这样一串数,它表示的数是11月15日9时30分28秒.
    在这串数中,“0”出现了2次,“1”出现了三次,“2”、“3”、“5”、“8”、“9”各出现了一次,
    而“4”、“6”、“7”没有出现.如果在电子计时器所显示的这串数里,0,1,2,3,4,5,6,7,8,9这
    十个数字都只出现一次,称它所表示的时刻为“十全时”,那么2003年一共有__个这样的“十全时”.
    注:按24小时制记时

    分析过程:
    1.按照上题所说,‘十全时’的数一共十位,十位中要有 0,1,2,3,4,5,6,7,8,9这十个数,也可以说成十位每位都不一样(ps:因为阿拉伯数字一共也就只有十个单位数);
    2.题目所说的2003年不免让人想到是不是需要判断是否是闰年。然后一想,闰年和非闰年的区别就是2月份是不是有29号,但是不论是不是有29号,2月的2数和29号肯
    定是重复了,不可能是‘十全时’数。所以这里不去考虑是否是闰年的问题
    3.题目所述的‘月’、‘日’、‘时’、‘分’、‘秒’。只有日的数字范围不是固定的,是根据月份确定的。而其他的都是固定的。

    分析结果:
    根据我们的分析首先可以确定要使用什么来筛选这个‘十全时’数。因为它的每位不相同,所以使用Set集合来筛选,这样就可以确定,只有当set集合的长度是10的时候,
    这个数才是‘十全时’数。
    然后我们要计算日的数字范围,那么我们可以定义一个数组,里面存入十二个月每个月对应的天数,根据月份来取对应的日的数字。
    分析到这里,代码就可以开始写了。
    下面贴上我实现的完整代码(仅供参考)

    public static void main(String[] args) {
    
        Scanner scanner = new Scanner(System.in);
    
        System.out.println("请输入年份:");
        String year = scanner.next();
    
        System.out.println("开始统计 [" + year +"] 年的十全时个数!");
        int[] mouths = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
        int count = 0;
        Set<Character> timeSet = null;
        Character[] timeSetArray = new Character[10];
        char[] mouthStr = {};
        for (int mouth = 1; mouth <= 12; mouth ++) {  //遍历月
            int i = 0;
            mouthStr = String.valueOf(mouth).toCharArray();
            timeSetArray[0]=mouthStr[0];
            if (mouthStr.length == 1) {
                timeSetArray[1]='0';
            } else {
                timeSetArray[1]=mouthStr[1];
            }
            for (int day = 1; day <= mouths[mouth - 1]; day ++) {   //按月遍历日
                mouthStr = String.valueOf(day).toCharArray();
                timeSetArray[2]=mouthStr[0];
                if (mouthStr.length == 1) {
                    timeSetArray[3]='0';
                } else {
                    timeSetArray[3]=mouthStr[1];
                }
                for (int hour = 0; hour <= 23; hour ++) {   //遍历小时
                    mouthStr = String.valueOf(hour).toCharArray();
                    timeSetArray[4]=mouthStr[0];
                    if (mouthStr.length == 1) {
                        timeSetArray[5]='0';
                    } else {
                        timeSetArray[5]=mouthStr[1];
                    }
                    for (int min = 0; min <= 59; min ++) {   //遍历分钟
                        mouthStr = String.valueOf(min).toCharArray();
                        timeSetArray[6]=mouthStr[0];
                        if (mouthStr.length == 1) {
                            timeSetArray[7]='0';
                        } else {
                            timeSetArray[7]=mouthStr[1];
                        }
                        for (int second = 0; second <= 59; second ++) {   //遍历秒
                            mouthStr = String.valueOf(second).toCharArray();
                            timeSetArray[8]=mouthStr[0];
                            if (mouthStr.length == 1) {
                                timeSetArray[9]='0';
                            } else {
                                timeSetArray[9]=mouthStr[1];
                            }
    
                            timeSet = new HashSet<Character>(Arrays.asList(timeSetArray));
    
                            if (timeSet.size() == 10) {
                                count ++;
                            }
                        }
                    }
                }
            }
        }
        System.out.println("[" + year +"] 年的十全时个数为 " + count);
    }
    

    如有不对之处,可以评论联系博主!

  • 相关阅读:
    this.$route和this.$router的区别
    HTTP请求方式中get和post的区别
    如何使用NPM?CNPM又是什么?
    javascript通过navigator.userAgent识别各种浏览器
    用JS添加和删除class类名
    前端布局神器display:flex
    强大的display:grid
    自动化测试的那些事儿
    selenium家族发展史
    第八章、函数进阶之字典生成式与匿名函数
  • 原文地址:https://www.cnblogs.com/longjee/p/8430257.html
Copyright © 2020-2023  润新知