今天早上无聊看着计时器(数字形式),突然想出一个很有意思的题,如下:
问一天的时间中出现次数最多的数字,出现时间最多的数字,请用自己熟悉的编程语言计算结果
public static void main(String[] args) {
Map<Integer,Integer> map = new HashMap<>();
List<Integer> list1 = new ArrayList<>();
int a0 = 0;
int a1 = 0;
int a2 = 0;
int a3 = 0;
int a4 = 0;
int a5 = 0;
int a6 = 0;
int a7 = 0;
int a8 = 0;
int a9 = 0;
int time = 0;
List<String> list = new ArrayList<>();
for (int k = 0; k < 24; k++) {
int minutes = 0;
for (int j = 0; j < 60; j++) {
int second = 0;
for (int i = 0; i < 60; i++) {
String data;
if (k < 10) {
if (j < 10) {
if (i < 10) {
data = 0 + "" + time + "" + 0 + minutes + "" + 0 + second;
list.add(data);
} else {
data = 0 + "" + time + "" + 0 + minutes + "" + second;
list.add(data);
}
} else {
if (i < 10) {
data = 0 + "" + time + "" + minutes + "" + 0 + second;
list.add(data);
} else {
data = 0 + "" + time + "" + minutes + "" + second;
list.add(data);
}
}
} else {
if (j < 10) {
if (i < 10) {
data = time + "" + 0 + minutes + "" + 0 + second;
list.add(data);
} else {
data = time + "" + 0 + minutes + "" + second;
list.add(data);
}
} else {
if (i < 10) {
data = time + "" + minutes + "" + 0 + second;
list.add(data);
} else {
data = time + "" + minutes + "" + second;
list.add(data);
}
}
}
second++;
}
minutes++;
}
time++;
}
Iterator<String> iterator = list.stream().iterator();
while (iterator.hasNext()){
String next = iterator.next();
String[] split = next.split("");
for (String s1 : split){
switch (Integer.parseInt(s1.trim())){
case 0:a0++;break;
case 1:a1++;break;
case 2:a2++;break;
case 3:a3++;break;
case 4:a4++;break;
case 5:a5++;break;
case 6:a6++;break;
case 7:a7++;break;
case 8:a8++;break;
case 9:a9++;break;
}
}
}
map.put(0,a0);
map.put(1,a1);
map.put(2,a2);
map.put(3,a3);
map.put(4,a4);
map.put(5,a5);
map.put(6,a6);
map.put(7,a7);
map.put(8,a8);
map.put(9,a9);
System.out.println(map);
}
}
哈哈有心了
出现次数最多的和时间最多的还用想吗?按道理时间最多的可能就是1、2吧,次数也是1、2
不对,时间最多的是1,次数也是吧,如果 九点十三分写为 9:13的话
@小草上飞飞: 数字形式的时间
@T-MAC泛泛之交: 等我明天给你写个C# 的,枚举一天的秒数计算下,反正计算机算的,又不是我数的。
我感觉1最多了,如果 九点十三分写为 9:13 而不是09:13
@T-MAC泛泛之交: 24小时制
明明时1啊!
云玩家的观点:假定上午1点的表示方法为01:00:00,24点、0点表示为00:00:00则1和2最多且一样多。
理由:60进制的分秒的个位均为0-9且出现的次数一样;十位均为0-5且出现的次数一样。故0-5出现次数最多且一样多
关于小时:24进制,个位:0-3出现的次数最多且一样多;十位:0-2出现的次数一样多。故0-2出现的次数最多且一样多
综上,0-2出现的次数最多且一样多。这样分析对吗?
当然,如果24点、0点表示为0:00:00,这就是另一种答案了。
以数字形式为模板
给0~9个数字建一个bitmap,即为下标值;然后遍历,每次给对应的下标加一下;遍历结束以后找出最大数是不是就可以了