之前看过一个鸡汤,说中国学生和国外学生,老师提出这个问题,仅是问重合多少次。中国学生拿出笔闷头算,国外学生直接拿出表直接调时间…………
但是这个问题如果是重合的具体时间如何用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 基本符合事实