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

题目:
假如电子计时器所显示的十个数字是“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); }

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypdpp.html