中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-25 03:37
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 出题:一昼夜时钟三针重合几次? 查看 6,143 回复 32
16 发表于 2009-01-13 12:45 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
19年会员
UID 59307
状态 离线
根据大伙的理解,理想钟应该是重合23次。
0-24 包含 25 个整点,24 个小时;
11-13 两个整点间只有 12 点重合,同理 23-24 之间只有24;
0-24 相当于一整天多一秒,而刚好这一秒就是重合的,所以是 22+1=23 次。
┌───────┐
├→学习→实践→┤
└───────┘
17 发表于 2009-01-13 18:16 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
时间象流水一样是连续的,而不是跳跃式的,所以理想钟应该象 8 楼说的
18 发表于 2009-01-14 00:13 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
(网上找的,没学过证明看不懂)

只有两次

假设时针的角速度是ω(ω=π/6每小时),则分针的角速度为12ω,秒针的角速度为72ω。分针与时针再次重合的时间为t,则有12ωt- ωt=2π,t=12/11小时,换算成时分秒为1小时5分27.3秒,显然秒针不与时针分针重合,同样可以算出其它10次分针与时针重合时秒针都不能与它们重合。只有在正12点和0点时才会重。

证明:将时针视为静止,考察分针,秒针对它的相对速度:

12个小时作为时间单位“1”,“圈/12小时”作为速度单位,

则分针速度为11,秒针速度为719。

由于11与719互质,记12小时/(11*719)为时间单位Δ,

则分针与时针重合当且仅当 t=719kΔ k∈Z

秒针与时针重合当且仅当 t=11jΔ j∈Z

而719与11的最小公倍数为11*719,所以若t=0时三针重合,则下一次三针重合

必然在t=11*719*Δ时,即t=12点。
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
NeverAgain +2 2009-01-19 00:58
19 看你怎样理解钟针的转动,答案就不唯一了。 发表于 2009-01-14 10:25 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
说了,如果按角度算是得不到我的结果的。

这个题没有说针的转动方式。有一直都走的钟,大多数设计的
针还是一跳一跳的。。。最小摆幅为1秒。。。
这种针不是匀速圆周运动的……上面的证明就不适用了。
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
20 发表于 2009-01-14 16:41 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
12小时重合

@echo off
for /l %%i in (0 1 11) do (
setlocal
set/a n=%%i*60
call:lp %%i
endlocal
)
pause&goto :eof
:lp
set/a d=%d%%n:~,1%%%11,m=%d%%n:~,1%/11
if "%i%"=="0" set i=
set i=%i%%m%
set n=%n:~1%
if defined n goto lp
set/a d=%1*60-(11*i)
:lp1
set/a m=d*10/11,w+=1
if "%j%"=="0" set j=
if %w% lss 5 set j=%j%%m%&set/a d=d*10%%11&goto lp1
set/a j*=6,h+=%1+i/60,i%%=60
set h=0%h%&set i=0%i%&set j=0%j%
echo %h:~-2%:%i:~-2%:%j:~-5,2%.%j:~-3,2%
goto :eof


[ Last edited by terse on 2009-1-15 at 11:17 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
exzzz +2 2009-01-22 00:23
简单!简单!再简单!
21 发表于 2009-01-14 23:41 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
Originally posted by terse at 2009-1-14 16:41:
12小时重合

@echo off
for /l %%i in (0 1 11) do (
setlocal
set/a n=%%i*60
call:lp %%i
endlocal
)
pause&goto :eof
:lp
set/a d=%d%%n:~,1%%%11,m=%d%%n:~,1%/11
...

非常版主这个看不懂啊,简单介绍下算法吧。
22 发表于 2009-01-15 02:40 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by linee at 2009-1-14 23:41:

非常版主这个看不懂啊,简单介绍下算法吧。

我的思路是这样 探讨下不知正确否
假设表面为60刻度 一小时是5个刻度 x个刻度就是 0点后的x/5刻度 同样y分钟就是y/60小时 到下一个重合点的时候 两刻度相对0点后刻度一样 即x/5小时-y/60小时是个整数 因为分走多一圈 所以一直递增 1 因为刻度一样所以我想 X/5-Y/60的结果应该是 0-11递增 这里的x和y刻度相等也就是X/5-X/60
刚用批写了个 由此题派生出的另一题:
就是时针和分针在什么刻度可以对调且是合理的比如:
07:43:13.00
07:48:15.10
07:53:17.20
07:58:19.29
08:03:21.39
08:08:23.49
08:13:25.59
08:18:27.69
08:23:29.79
08:28:31.88
08:33:33.98
08:38:36.07
简单!简单!再简单!
23 发表于 2009-01-15 09:28 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
Originally posted by terse at 2009-1-15 02:40:

我的思路是这样 探讨下不知正确否
假设表面为60刻度 一小时是5个刻度 x个刻度就是 0点后的x/5刻度 同样y分钟就是y/60小时 到下一个重合点的时候 ...

应该是正确的,与我计算的非常相似(我是按时针分针每过12/11时刻重合一次来算的),如下图:

怎么没图呢?

算了,就文本说明吧,你这个计算下来跟我计算的(前面提供过)非常相似,只有一个时刻异常,就是09:49这个时刻,你这个计算的是09:49:54.540,我前面提供是的09:49:05.45,一个54一个05差的不是一点半点,有点奇怪。

先分析下你的代码看看。

[ Last edited by linee on 2009-1-15 at 09:54 ]
24 发表于 2009-01-15 11:18 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by linee at 2009-1-15 09:28:

....一个54一个05

取位错了 已修正
简单!简单!再简单!
25 发表于 2009-01-15 15:10 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
Originally posted by terse at 2009-1-15 02:40:

我的思路是这样 探讨下不知正确否
假设表面为60刻度 一小时是5个刻度 x个刻度就是 0点后的x/5刻度 同样y分钟就是y/60小时 到下一个重合点的时候 ...

分析下来,你这个的结果应该就相当于每过12/11时刻重合一次,尝试修改你的代码如下,希望不要介意。
@echo off
for /l %%i in (0 1 11) do (
setlocal
set/a n=%%i*60
call:lp %%i
endlocal
)
pause&goto :eof
:lp
set/a d=%n%%%11,i=%n%/11
set/a j=d*10000/11
set/a j*=6,h=%1+i/60,i%%=60
set h=0%h%&set i=0%i%&set j=0%j%
echo %h:~-2%:%i:~-2%:%j:~-5,2%.%j:~-3,2%
goto :eof
26 发表于 2009-01-15 15:26 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
我实际解了上面程式 你简化很多 很好
再讨论下时针和分针在什么刻度可以对调且是合理的情况
其中重合情况 作了提示

@echo off
for /l %%i in (0 1 11) do (
for /l %%j in (0 1 11) do (
setlocal enabledelayedexpansion
set/a n=^(%%j*12+%%i^)*60
set/a d=n%%143,i=n/143,j=d*10000/143,j*=6,h=%%i+i/60,i%%=60
set h=0!h!&set i=00!i!&set j=00!j!
if %%i equ %%j (echo 表针重合 echo !h:~-2!:!i:~-2!:!j:~-5,2!.!j:~-3,2!
) else echo !h:~-2!:!i:~-2!:!j:~-5,2!.!j:~-3,2!
endlocal
))
pause&goto :eof

重合的代码 放在for里效率高点 前面的call出是因为考虑小数 现在这样直接可以了

@echo off
for /l %%i in (0 1 11) do (
setlocal enabledelayedexpansion
set/a n=%%i*60,d=n%%11,i=n/11,j=d*10000/11,j*=6,h=%%i+i/60,i%%=60
set h=0!h!&set i=00!i!&set j=00!j!
echo !h:~-2!:!i:~-2!:!j:~-5,2!.!j:~-3,2!
endlocal
)
pause


[ Last edited by terse on 2009-1-18 at 14:51 ]
简单!简单!再简单!
27 发表于 2009-01-15 17:26 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
时针分针对调是什么意思?
28 发表于 2009-01-15 17:33 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by linee at 2009-1-15 17:26:
时针分针对调是什么意思?

比如 重合时时针分针对调位置肯定是合理的 如3点的时候 对调位置显然是不合理的 因为时针12点的时候 分针绝不会在3点吧
简单!简单!再简单!
29 发表于 2009-01-16 23:03 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
Originally posted by terse at 2009-1-15 17:33:

比如 重合时时针分针对调位置肯定是合理的 如3点的时候 对调位置显然是不合理的 因为时针12点的时候 分针绝不会在3点吧

有点难理解,不想研究了。
30 发表于 2009-01-16 23:06 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
我来发一个看如何,
惭愧啊,书到用时方恨少,总觉得表达不清楚,我很努力了,将就看吧。欢迎指正。
:: 时钟三针重合问题:
::
:: 思路:先找时针分针重合的位置s1,再找此时秒针的位置s2,
:: 如果s2=s1则三针重合。从0点比对到24点结束。
::
:: 时针分针第一次重合发生在1点到2点之间,设此时刻时间为t,
:: 时针角速度为w,此时时针行进wt,分针角速度为时针的12倍,
:: 有分针行进12wt,此时分针比时针多转一圈(12w),于是有:
:: 12wt-wt=12w,t=12/11
:: 此时时针位置wt=w*12/11=(1/11)*12w,相当于1/11圈,可取
:: s1=1/11
:: 又秒针角速度是时针的720倍,此时秒针行进720wt,秒针位置
:: 720wt=720w*12/11=(65+5/11)*12w
:: 相当于65又5/11圈,可取
:: s2=5/11
:: 比对s1不等于s2,知道此时三针不重合,因cmd不支持浮点,
:: s1,s2的比对程序改除11为对11求余后再比对。
::
@echo off&setlocal enabledelayedexpansion
for /l %%i in (0,1,22) do (
set/a s1=%%i %%11,s2=%%i*5%%11,i=%%i+1
set/a h=%%i*12/11,m=%%i*60/11%%60,s=%%i*300/11%%60,sh=%%i*300%%11,sh*=100/11
for %%j in (h m s sh i) do if !%%j! lss 10 set %%j=0!%%j!
set /p=时分针重合_!i! !h!:!m!:!s!.!sh! <nul
if !s1! equ !s2! (set/a j+=1&echo 三针重合_!j!) else echo.
)
pause


[ Last edited by linee on 2009-1-16 at 23:14 ]
论坛跳转: