1 /* 2 模拟:这题没啥好说的,把指针转成角度处理就行了,有两个注意点:结果化简且在0~180内;小时13点以后和1以后是一样的(24小时) 3 模拟题伤不起!计算公式在代码内(格式:hh/120, mm/120, ss/120) 4 */ 5 /************************************************ 6 * Author :Running_Time 7 * Created Time :2015-8-13 13:04:31 8 * File Name :H.cpp 9 ************************************************/ 10 11 #include <cstdio> 12 #include <algorithm> 13 #include <iostream> 14 #include <sstream> 15 #include <cstring> 16 #include <cmath> 17 #include <string> 18 #include <vector> 19 #include <queue> 20 #include <deque> 21 #include <stack> 22 #include <list> 23 #include <map> 24 #include <set> 25 #include <bitset> 26 #include <cstdlib> 27 #include <ctime> 28 using namespace std; 29 30 #define lson l, mid, rt << 1 31 #define rson mid + 1, r, rt << 1 | 1 32 typedef long long ll; 33 const int MAXN = 1e5 + 10; 34 const int INF = 0x3f3f3f3f; 35 const int MOD = 1e9 + 7; 36 char str[11]; 37 38 int GCD(int a, int b) { 39 return (b == 0) ? a : GCD (b, a % b); 40 } 41 42 int main(void) { //HDOJ 5387 Clock 43 int T; scanf ("%d", &T); 44 while (T--) { 45 int h = 0, m = 0, s = 0; 46 int hh[2], mm[2], ss[2]; 47 scanf ("%s", str + 1); 48 h = (h + (str[1] - ‘0‘)) * 10 + str[2] - ‘0‘; 49 m = (m + (str[4] - ‘0‘)) * 10 + str[5] - ‘0‘; 50 s = (s + (str[7] - ‘0‘)) * 10 + str[8] - ‘0‘; 51 52 if (h >= 12) h -= 12; //WA点 53 54 hh[0] = 3600 * h + 60 * m + s; //角度 55 mm[0] = 720 * m + 12 * s; 56 ss[0] = 720 * s; 57 58 int tmp = hh[0]; //计算角度差,要在0~180度内 59 hh[0] = abs (hh[0] - mm[0]); 60 hh[0] = min (hh[0], 360*120 - hh[0]); 61 int tmp2 = mm[0]; 62 mm[0] = abs (tmp - ss[0]); 63 mm[0] = min (mm[0], 360*120 - mm[0]); 64 ss[0] = abs (tmp2 - ss[0]); 65 ss[0] = min (ss[0], 360*120 - ss[0]); 66 67 hh[1] = GCD (120, hh[0]); //求GCD,化简 68 mm[1] = GCD (120, mm[0]); 69 ss[1] = GCD (120, ss[0]); 70 71 if (hh[0] % 120 == 0) { //输出 72 printf ("%d ", hh[0] / 120); 73 } 74 else { 75 printf ("%d/%d ", hh[0] / hh[1], 120 / hh[1]); 76 } 77 if (mm[0] % 120 == 0) { 78 printf ("%d ", mm[0] / 120); 79 } 80 else { 81 printf ("%d/%d ", mm[0] / mm[1], 120 / mm[1]); 82 } 83 if (ss[0] % 120 == 0) { 84 printf ("%d \n", ss[0] / 120); 85 } 86 else { 87 printf ("%d/%d \n", ss[0] / ss[1], 120 / ss[1]); 88 } 89 } 90 91 return 0; 92 }
时间: 2024-10-22 20:39:47