

算法题:三针重叠问题
source link: http://caiknife.github.io/blog/2018/11/27/san-zhen-zhong-die-wen-ti/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

算法题:三针重叠问题
Nov 27th, 2018
Posted by CaiKnife
经典问题——三针重叠问题。
在时针走满一圈的情况下,也就是12小时内,时针、分针、秒针会重合多少次?
分析一下:秒针60s走完一整圈,每秒的旋转角度是6度,分针速度是秒针的1/60,每s的旋转角度是1/10度,时针速度是分针的1/12,每s的旋转角度是1/120度。那么就需要计算出12个小时的时间内,也就是12*3600秒内,每秒钟三个指针的位置即可。如果度数相同,那么就认为三针重合。
更简单地来说,假设把时针的最小步长定位1,那么分针的步长就是12,而秒针的步长就是720。再针对各自一圈的步长取模,就可以得到每秒时每个位置的偏移量,如果三个偏移量相等的话,
编写程序如下:
(clock.php) download
<?php
/**
* Created by PhpStorm.
* User: caiknife
* Date: 2018/11/27
* Time: 10:51
*/
namespace App\Cron;
class Time
{
const TOTAL_TIME = 12 * 60 * 60;
protected $_hourNeedle = 0;
protected $_minuteNeedle = 0;
protected $_secondNeedle = 0;
protected $_nextMinuteNeedle = 0;
public function __construct()
{
date_default_timezone_set('Asia/Shanghai');
}
public function main()
{
$baseTime = strtotime('2018-01-01 00:00:00');
for ($i = 0; $i <= static::TOTAL_TIME; $i++) {
// 求时针的偏移量
$this->_hourNeedle = (1 * $i) % static::TOTAL_TIME;
// 求分针的偏移量
$this->_minuteNeedle = (12 * $i) % static::TOTAL_TIME;
// 求秒针的偏移量
$this->_secondNeedle = (720 * $i) % static::TOTAL_TIME;
if ($this->_hourNeedle == $this->_minuteNeedle
&& $this->_minuteNeedle == $this->_secondNeedle) {
echo $i . PHP_EOL;
echo date("H:i:s", $baseTime + $i) . PHP_EOL;
}
}
}
}
所以,在12个小时内,三针重合只有在0点和12点的时候才会出现。这个时候是真正的停止重合。
而在其他的条件下,时针和分针只会出现划过重合,不会出现停止重合。
下面更新一个Golang写的版本,了解一下Golang时间处理的奇葩……
(clock.go) download
package main
import (
"fmt"
"time"
)
const (
TotalTime = 12 * 60 * 60
FDateTime = "2006-01-02 15:04:05" // 奇葩的时间点,格式化必须是这个格式……
FDate = "2006-01-02"
FTime = "15:04:05"
StartTime = "2018-01-01 00:00:00" // 我们设置的起点时间
)
func main() {
fmt.Println(time.Now().Format(FDate)) // 先试试格式化日期
fmt.Println(time.Now().Format(FTime)) // 再试试格式化时间
// 下面定个时间起点
fromDate, _ := time.ParseInLocation(FDateTime, StartTime, time.Local)
for i := 0; i <= TotalTime; i++ {
hourNeedle := (i * 1) % TotalTime
minuteNeedle := (i * 12) % TotalTime
secondNeedle := (i * 720) % TotalTime
if hourNeedle == minuteNeedle && minuteNeedle == secondNeedle {
fmt.Println("Three needles get together!")
fmt.Println(time.Unix(fromDate.Unix()+int64(i), 0).Format(FTime))
}
}
}
Recommend
-
36
以下整理给金三银四求职的小伙伴,同时也是为了巩固笔者所学的知识,希望对大家有所帮助,后面将会陆续整理出其他篇章 js 系列 、http 、react、vue、算法等... 本文主题: 基本概念: 标准模型 + IE 模型 基本模型和 IE 模型的区别:计算
-
13
萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 先来看一道简单的几何问题: 下图中,黑圆恰好将红圆的面积等分,且黑圆的圆心恰好在红圆上。假设红圆半径为R,黑圆半径为r,求r。
-
13
LeetCode Best Time to Buy and Sell Stock IV(k不重叠最大子段和)线性解法 Best Time to Buy and Sell Stock IV...
-
13
点击上方“3D视觉工坊”,选择“星标”干货第一时间送达摘要抓取物体堆叠和重叠场景中的特定目标是实现机器人抓取的必要和具有挑战性的任务。在本文中,我们提出了一种基于感兴趣区域(RoI)的机器人抓取检测算法,以同时...
-
9
Pro会员2021-03-12 17:55三针激素,长春高新迎来第二个“青春期” | 一解财报文章所属专栏 妙解公司 1. 长春高新核心子公司金赛...
-
9
by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=5793 本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随...
-
7
一图看懂:一针二针三针新冠疫苗各有什么不同? 2021年05月28日 14:36 13254 次阅读 稿源:快科技 1 条评论 随着新一...
-
8
掩码R-CNN重叠包围盒问题 fendouai...
-
9
九价、三针、二十六岁:被“HPV焦虑”围猎的女孩们 2022年08月27日 11:46 14975 次阅读 稿源:
-
6
柳叶刀子刊:三针疫苗,BA.2突破性感染增强免疫反应,增强对其他变体反应
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK