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(1T104) test cases
for each case,one line include the time

0hh<24,0mm<60,0ss<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("
");
	}
	return 0;
}


原文地址:https://www.cnblogs.com/mfmdaoyou/p/6957560.html