acdream 1686(数学)

本文介绍了一种算法,用于计算从当前时间开始多少秒后时钟上的时针和分针会完全重合。通过计算时针与分针相对于0点的角度,利用角度变化率来确定重合所需的时间。

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

题意:给出了一个钟表上的准确时间,hh:mm:xx,问多少秒后时针和分针能够重合。

题解:计算此时分针和时针距离0点的准确角度hd与md,然后每秒分针转动mm = 0.1度,时针转动hh = 1/120,然后如果要分针与时针重合,hd + hh * x = md + mm * x,当hd > md时x即为解,否则先让分针走到0点,然后时针加上相应角度继续用上面的式子计算x。

#include <stdio.h>
double a, b, c;
double hh = 1.0 / 120; //1秒时针走的角度
double mm = 0.1;  //1秒分针走的角度

int main() {
	int t;
	scanf("%d", &t);
	while (t--) {
		scanf("%lf:%lf:%lf", &a, &b, &c);
		if (a >= 12)	
			a = a - 12;
		double hd = hh * (c + b * 60 + a * 3600);
		double md = mm * (c + b * 60);
		if (hd - md > 1e-9)
			printf("%.6lf\n", (hd - md) / (mm - hh));
		else {
			double temp = (360.0 - md) / mm;
			hd = hd + temp * hh;
			md = 0;
			printf("%.6lf\n", temp + (hd - md) / (mm - hh));
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值