栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

求钟表时针和分钟夹角算法问题

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

求钟表时针和分钟夹角算法问题

这是一道原博主面试中遇到的算法题,他觉得蛮有意思的所以写出来与大家分享一下。
皮一下,很开心。

问题

给定一个时间值,需要计算出表盘上时针与分针的之间的夹角度数。

思路

虽然题目中只有一个条件,但其实已经有许多隐含条件包括在内。
我们要得出的是时针和分针之间的角度,在一个钟表上因为钟表是圆形,所以我们得出第二个已知条件,表盘360°;第三个已知条件,表盘上有 12 个小时刻度;第三个已知条件,分针走一圈时针走一个刻度。
虽然题目里没有给出以上条件,但常识告诉我们这些条件。
拿到这些条件我们的计算就简单了:
首先计算得出一些我们需要的数值,如每增加一小时时针走多少度,分针增加一分钟走多少度,分针每走一分钟带动时针走多少度。
得到这些值后我们与给定的时间进行计算:

小时 * 每增加一小时时针走多少度 = 整点时间时时针度数
分钟 * 分针每走一分钟带动时针走多少度 = 分针带动时针度数
整点时间时时针度数 + 分针带动时针度数 = 此时时针度数
分钟 * 分针增加一分钟走多少度  = 分针度数
此时时针度数 - 分针度数 = |夹角度数|
取绝对值就得出了它们之间的夹角度数

实现代码
 12 ? $hour - 12 : $hour;
    $minute = (int) date('m', $time);

    // 钟表总度数
    $timekeeperAngle = 360;
    // 时间刻度份数
    $scale = 12;
    // 每份时间刻度占用的度数
    $oneScale = $timekeeperAngle / $scale;
    // 分针每走1分钟时针转动的度数
    $oneRelateScale = $oneScale / 60;
    // 分针每走1分钟转动的度数
    $oneMinuteScale = $timekeeperAngle / 60;

    // 小时*每份度数 得 整点时间的时针度数
    $integralScale = $hour * $oneScale;
    // 分针带动时针走的度数
    $relateScale = $minute * $oneRelateScale;

    // 时针真正的起始点度数
    $relayHourScale = $integralScale + $relateScale;

    // 分钟的现在度数
    $relayMinuteScale = $minute * $oneMinuteScale;

    echo abs($relayHourScale - $relayMinuteScale);
}

calculate(time());

转自:https://juejin.im/post/599d7c35f265da246c4a1776

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/226960.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号