面试的时候遇到一个很好玩的问题:钟表的时针、分针、秒针每天重合多少次?
于是,matlab启动!
我分成"指针跳变"、"指针连续",两个版本进行仿真:
版本一:指针跳变
matlab
%% 解释钟表三指针重合问题
% 假设:
% 1. 钟表的刻度是一圈60格
% 2. 钟表指针都是跳变的
% 3. 秒针每秒跳一格、分针每分跳一格、时针每12分跳一格
clear;
clc;
close all;
% 定义变量
len = 24*60*60;% 所有的秒数
secs = zeros(1,len);% 秒针
mins = zeros(1,len);% 分针
hour = zeros(1,len);% 时针
% 秒针
for i = 0 : (len/60)-1
secs((1:60)+i*60) = 0:59;
end
% 分针
tmp = 0;
for i = 0 : (len/60)-1
mins((1:60)+i*60) = tmp.*ones(1,60);
tmp = mod(tmp+1,60);
end
% 时针
tmp = 0;
for i = 0 : (len/60/12)-1
hour((1:720)+i*720) = tmp.*ones(1,720);
tmp = mod(tmp+1,60);
end
% 找出重合点
for i = 0:len-1
if(secs(i+1) == mins(i+1) && secs(i+1)==hour(i+1))
% fprintf("%d:\t ", i);
fprintf("%d:%d:%d\n",floor(i/3600),mod(floor(i/60),60),mod(i,60));
end
end
运行结果:
matlab
0:0:0
1:5:5
2:10:10
3:16:16
4:21:21
5:27:27
6:32:32
7:38:38
8:43:43
9:49:49
10:54:54
11:59:59
12:0:0
13:5:5
14:10:10
15:16:16
16:21:21
17:27:27
18:32:32
19:38:38
20:43:43
21:49:49
22:54:54
23:59:59
版本二:指针连续
matlab
%% 解释时钟指针重合问题
% 假设:
% 1. 指针都是连续转动的
% 2. 秒针每秒转360/60=6度,分针每分钟转360/60=6度,时针每小时转360/12=30度。
% 3. 角速度统一(单位:角度/s):秒针-6度/s,分针-0.1度/s,时针-(1/120)度/s
clear;
clc;
close all;
% 参数定义
t = 0:1:(24*60*60-1); % 一天总时长
hour = mod(1/120.*t, 360); % 时针
mins = mod(0.1.*t, 360); % 分针
secs = mod(6.*t, 360); % 秒针
len = length(t);
% 找出重合点
for i = 0:len-1
if(secs(i+1) == mins(i+1) && secs(i+1)==hour(i+1))
fprintf("%d:%d:%d\n",floor(i/3600),mod(floor(i/60),60),mod(i,60));
end
end
运行结果:
matlab
0:0:0
12:0:0
结论
- 若指针跳变,每小时都会重合一次,一天可以重合24次。
- 若指针连续转动,只有最开始的0时0分0秒、中午12点整,这两个时间会重合。
我也不知道对不对啊,不服来辩!