• 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;
    }


  • 相关阅读:
    Iframe和Frame中实现cookie跨域的方法(转载)
    android中拷贝assets下的资源文件到SD卡中(可以超过1M)
    OpenSL ES 查询设备支持的SL Profiles
    NDK开发中的一个HTTP下载实例附带下载进度
    android中配置文件property的用途以及使用<转>
    Eclipse 工程使用相对路径导入Jar包设置
    Android 解压zip文件(支持中文)
    c++实现一个比较两个string类型的版本号的小demo
    linux c++下载http文件并显示进度<转>
    Linux下类似windows下_beginthread和_endthread 的多线程开发
  • 原文地址:https://www.cnblogs.com/herumw/p/9464693.html
Copyright © 2020-2023  润新知