24小时在线 - 古典小说 - 文学小说 - 关于我们
您的当前位置:首页 > 资讯 > 其它 >

算法:每过多长时间时针和分针相遇一次

来源:比特技术网 编辑:比特技术 时间:2018-07-31点击:
导读:今天在脉脉上看到一个哥们的面试题是这个题目,当时自己想了想感觉有点思路就写了个简单的代码! for (int i = 0; i 720; i++) { if (6 * i % 360 = 0.5 * i isNewCircle == true) { System.out.println(i); isNewCircle = false; } if (6 * i % 360 0.5 * i)
今天在脉脉上看到一个哥们的面试题是这个题目,当时自己想了想感觉有点思路就写了个简单的代码!
 
for (int i = 0; i < 720; i++) {
    if (6 * i % 360 >= 0.5 * i && isNewCircle == true) {
    System.out.println(i);
    isNewCircle = false;
    }
 
    if (6 * i % 360 < 0.5 * i) {
    isNewCircle = true;
    }
 
}
 
思路主要是: 
从0点开始到12点看作一次完整循环,所以一共是720分钟, 
从0点开始,如果想要重合则分针转过的角度必须大360度, 
所以考虑每次分针每次转过的角度跟360取模,当取到的值第一次大于等于时针的角度时,恰恰是正好重合或者刚刚过了重合! 
当第一次大于等于时针的角度后,其后的大于都是不计入的,所设置了一个flag,当取模的值再次小于时针的角度时,说明新的一圈开始了! 
这样就可以取到正好重合或者刚刚过去重合的时间! 
结果为没65或者66分钟重合一次!
 
后来考虑这种算法是不合理的,因为算出来的值并不能代表正好重合时候的值!
 
然后又考虑了一种新的算法! 
1. 0点算是第一次重合,其后的每次重合都以上一次重合为参考点 
2. 则分针转过的角度为6x(x为走过的分钟),而时针走过的角度为0.5x 
3. 则 6x-0.5x = 360 度. x = 65.4545… 
所以相当于每过65.4545分钟就会重合一次 
ps:但是根据份针的跳动规律,只会在满1分钟后跳动一次,其实可以认为是在65跳到66分钟的过程中重合的!如果考虑分针是平滑移动的就可以忽略 了.
来源:比特技术在线(www.byte.online),欢迎分享本文,转载请保留出处!
http://www.byte.online/a/zixun/qita/2018/871413.html
责任编辑:比特技术

    打赏

    取消

    感谢您的支持,我会继续努力的!

    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    网友评论:

    Copyright © www.byte.online 比特技术在线 版权所有 粤ICP备15038486号-3
    本站所有资料来源于网络,由个人收集整理,仅限于个人学习和研究,如果侵犯您的权益请联系我们删除!
    Top