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

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

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

#include 
#include 
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  基本符合事实

你可能感兴趣的:(算法,数据结构)