hdu5387 Clock

Problem Description

Give a time.(hh:mm:ss),you should answer the angle between any two of the minute.hour.second hand

Notice that the answer must be not more 180 and not less than 0

Input

There are T(1≤T≤104) test
cases

for each case,one line include the time

0≤hh<24,0≤mm<60,0≤ss<60

Output

for each case,output there real number like A/B.(A and B are coprime).if it‘s an integer then just print it.describe the angle between hour and minute,hour and second hand,minute and second hand.

Sample Input

4
00:00:00
06:00:00
12:54:55
04:40:00

Sample Output

0 0 0
180 180 0
1391/24 1379/24 1/2
100 140 120 

这是一道简单模拟,但我做了挺长时间,果然模拟题还是很弱啊。。这里注意尽量不要涉及小数,因为会影响精度。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
int c[10][4],e,f;
int gcd(int a, int b){ return a == 0 ? b : gcd(b % a, a); }
void jian(int a,int b,int c,int d){
	int i,j,t1,t2,t;
	t1=a*d-b*c;
	t2=b*d;
	t=gcd(t2,t1);
	e=t1/t;
	f=t2/t;
}

int main()
{
	int h,m,t,s,n,i,j,T,x2,y2,x3,y3;
	char c1,c2;
	double b1,b2,b3;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d:%d:%d",&h,&m,&s);
		if(h>=12)h-=12;
		t=h*3600+m*60+s;
		c[1][1]=t;
		c[1][2]=120;

		c[2][1]=m*60+s;
		c[2][2]=10;

		c[3][1]=s*6;
		c[3][2]=1;

		e=f=0;
		jian(c[1][1],c[1][2],c[2][1],c[2][2]);
		if(e*f>0){
			e=f=0;
			jian(c[1][1],c[1][2],c[2][1],c[2][2]);
			if(e>f*180)jian(360,1,e,f);
			if(f==1)printf("%d ",e);
			else printf("%d/%d ",e,f);
		}
		else{
			e=f=0;
			jian(c[2][1],c[2][2],c[1][1],c[1][2]);
			if(e>f*180)jian(360,1,e,f);
			if(f==1)printf("%d ",e);
			else printf("%d/%d ",e,f);
		}

		e=f=0;
		jian(c[1][1],c[1][2],c[3][1],c[3][2]);
		if(e*f>0){
			e=f=0;
			jian(c[1][1],c[1][2],c[3][1],c[3][2]);
			if(e>f*180)jian(360,1,e,f);
			if(f==1)printf("%d ",e);
			else printf("%d/%d ",e,f);
		}
		else{
			e=f=0;
			jian(c[3][1],c[3][2],c[1][1],c[1][2]);
			if(e>f*180)jian(360,1,e,f);
			if(f==1)printf("%d ",e);
			else printf("%d/%d ",e,f);
		}

		e=f=0;
		jian(c[2][1],c[2][2],c[3][1],c[3][2]);
		if(e*f>0){
			e=f=0;
			jian(c[2][1],c[2][2],c[3][1],c[3][2]);
			if(e>f*180)jian(360,1,e,f);
			if(f==1)printf("%d ",e);
			else printf("%d/%d ",e,f);
		}
		else{
			e=f=0;
			jian(c[3][1],c[3][2],c[2][1],c[2][2]);
			if(e>f*180)jian(360,1,e,f);
			if(f==1)printf("%d ",e);
			else printf("%d/%d ",e,f);
		}
		printf("\n");
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-02 16:43:58

hdu5387 Clock的相关文章

hdu5387 Clock(数学水题)

题目: Clock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 709    Accepted Submission(s): 452 Problem Description Give a time.(hh:mm:ss),you should answer the angle between any two of the minute

[hdu5387 Clock]时钟夹角问题

题意:给一个时刻,求时针.分钟.秒针三者之间的夹角 思路:确定参照点,求出三者的绝对夹角,然后用差来得到它们之间的夹角,钝角情况用360.减去就行了. #include <map> #include <set> #include <cmath> #include <ctime> #include <deque> #include <queue> #include <stack> #include <vector>

hdu5387(2015多校8)--Clock(模拟)

题目链接:点击打开链接 题目大意:给出一个时间,问在钟表上这个时间的时候.时针和分针的角度,时针和秒针的角度.分针和秒针的角度.假设不是整数以分数的形式输出. 假设依照最小的格来算,那么: 1s对于秒针来说走1格,分针走12/720格.时针走1/720格. 1m对于分针来说走一个,时针走60/720格. 1h对于时针来说走5格. 计算给出的时间中时针,分针.秒针走的格数,相减得到差,每一格代表6度. 注意 1.整数的情况,当中有0,180和其他情况 2.取余 3.输出的角度0 <= j <=

HDU 4256 The Famous Clock

The Famous Clock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1399    Accepted Submission(s): 940 Problem Description Mr. B, Mr. G and Mr. M are now in Warsaw, Poland, for the 2012's ACM-ICPC

Clock Pictures

Clock Pictures 题目描述 You have two pictures of an unusual kind of clock. The clock has n hands, each having the same length and no kind of marking whatsoever. Also, the numbers on the clock are so faded that you can’t even tell anymore what direction i

时间管理命令date、clock、hwclock

date:日期 1.命令作用: 显示或设置系统时间和日期,需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间. 2.使用方式: date [options] [+格式] 3.参数说明: -d<字符串>:显示字符串所指的日期与时间.字符串前后必须加上双引号. -s<字符串>:根据字符串来设置日期与时间.字符串前后必须加上双引号. -u:显示GMT. %y 年份(以00-99来表示). %Y 年份(以四位数来表示). %m 月份(以01-12来

编写Java应用程序。首先,定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时、分、秒,一个构造方法用于对三个成员变量(时、分、秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义 一个主类——TestClass,在主类的main方法中创建多个时钟类的对象,使用这 些对象调用方法show()来显示时钟的时间。

package com.homework.zw; public class Clock { String hour; String minute; String second; Clock(String h,String m, String s) { hour=h; minute=m; second=s; } void show() { System.out.println("时间为:"+hour+"时"+minute+"分"+second+&q

HDU 多校 VIII 1008 clock

Clock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 377    Accepted Submission(s): 200 Problem Description Give a time.(hh:mm:ss),you should answer the angle between any two of the minute.hou

QDemo - Analog clock模拟时钟学习并改进

调用函数setRenderHint(QPainter::Antialiasing,true),使绘制时边缘平滑,使用颜色浓度的变化,把图形的边缘转换为象素时引起的扭曲变形尽可能减少,在支持这一功能的平台或者绘图设备上得到一个平滑的边缘. QTimer类提供了定时器信号和单触发定时器. 它在内部使用定时器事件来提供更通用的定时器.QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽.当这段时间过去了,它将会发射timeout()信号. 我