一个指针式的时钟,12小时内时针和分针重复多少次,分别是什么时间

本文介绍了如何使用C++编程语言计算两个时间点之间的重合时间,通过模拟时钟并利用GeoGebra验证,结果显示特定时间点有重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前看过一个鸡汤,说中国学生和国外学生,老师提出这个问题,仅是问重合多少次。中国学生拿出笔闷头算,国外学生直接拿出表直接调时间…………

但是这个问题如果是重合的具体时间如何用C语言算

#include <iostream>
#include <math.h>
using namespace std;
constexpr  float PI=3.141f;
constexpr int time_rate=60;  //分钟到小时转换率

/*测试网址*/
/*https://www.geogebra.org/m/auuvawgj*/

struct _Time{
  int hour;
  int minute;
  _Time(float t){
    hour=(t/time_rate);
    minute=t-hour*time_rate;
  }
  
  float getHourAngel(){
      constexpr float rate1=PI/360.0;
      constexpr float rate_hour=PI/6.0;
      return floor(1000*(rate1*minute+hour*rate_hour))/1000;   /*小时的偏移+小时内分钟过去引起的偏移*/
  }

  float getMinuteAngel(){
      constexpr float rate2=PI/30.0;
      return floor(1000*rate2*minute)/1000;  /*60分钟的偏移*/
  }

};

typedef  _Time Times;



int main(int argc, char* argv[]) {
  float time_m; //分钟数
  for(int i=1;i<12*60;i++){   /*只统计12小时的   剩下的时间是重复的*/
    Times m_time(i);
    float ang1=m_time.getHourAngel(); //计算时针角度 弧度制
    float ang2=m_time.getMinuteAngel(); //计算分针角度 弧度制
    //printf("Ang1 %f , Ang2 %f \n",ang1,ang2);


    if(abs(ang1-ang2)<0.06f){  //容忍度  两个浮点数之间的差  如果直接==两个浮点数精确相等可能性不大
      printf("重复时间 小时: %d  分钟 %d \n",m_time.hour,m_time.minute);
    }
  }
  return 0;
}

结果

重复时间 小时: 1  分钟 5 
重复时间 小时: 1  分钟 6 
重复时间 小时: 2  分钟 11 
重复时间 小时: 3  分钟 16 
重复时间 小时: 4  分钟 22 
重复时间 小时: 5  分钟 27 
重复时间 小时: 6  分钟 33 
重复时间 小时: 7  分钟 38 
重复时间 小时: 8  分钟 44 
重复时间 小时: 9  分钟 49 
重复时间 小时: 10  分钟 54 

经过模拟  模拟时钟 – GeoGebra  基本符合事实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值