题目:
假如电子计时器所显示的十个数字是“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);
}
如有不对之处,可以评论联系博主!