hdu5387(模拟)
生活随笔
收集整理的這篇文章主要介紹了
hdu5387(模拟)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:
給出一個(gè)時(shí)間,hh:mm:ss,hh代表小時(shí),mm代表分鐘,ss代表秒,要我們輸出時(shí)針和分針、時(shí)針和秒針、分針和秒針之間的角度,輸出兩個(gè)針之間<=180那個(gè)度數(shù),如果不是整數(shù),要用分?jǐn)?shù)表示。
思路:
給出時(shí)間后,我們可以統(tǒng)計(jì)總共走了多少秒,從而計(jì)算角度,這道題比賽的時(shí)候是隊(duì)友打的,直接上代碼吧。
注意,在代碼中,盡量用乘法代替除法,我們因?yàn)檫@個(gè)WA了一次。
代碼:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std;int main() {int T;int hh,mm,ss;scanf("%d",&T);while(T--) {scanf("%d:%d:%d",&hh, &mm, &ss);int sum = hh * 60 * 60 + mm * 60 + ss;sum %= (12 * 3600);int h = sum % (12 * 60 * 60);int m = sum % (60 * 60);int x = h - m * 12;if(x < 0) x = -x;int y = 120;int z = __gcd(x,y);x/=z;y/=z;if(x > y * 180) {int xx = 360 * y - x;int yy = y;int zz = __gcd(xx, yy);xx /= zz;yy /= zz;x = xx;y = yy;}if(x == 0 || x % y == 0) {printf("%d ", x/ y);} else {printf("%d/%d ",x,y);}h = sum % (12 * 60 * 60);m = sum % 60;x = h - m * 12 * 60;if(x < 0) x = -x;y = 120;z = __gcd(x,y);x/=z;y/=z;if(x > y * 180) {int xx = 360 * y - x;int yy = y;int zz = __gcd(xx, yy);xx /= zz;yy /= zz;x = xx;y = yy;}if(x == 0 || x % y == 0) {printf("%d ", x/ y);} else {printf("%d/%d ",x,y);}h = sum % (60 * 60);m = sum % 60;x = h - m * 60;if(x < 0) x = -x;y = 10;z = __gcd(x,y);x/=z;y/=z;if(x > y * 180) {int xx = 360 * y - x;int yy = y;int zz = __gcd(xx, yy);xx /= zz;yy /= zz;x = xx;y = yy;}if(x == 0 || x % y == 0) {printf("%d ", x/ y);} else {printf("%d/%d ",x,y);}puts("");} }總結(jié)
以上是生活随笔為你收集整理的hdu5387(模拟)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hdu5389(DP)
- 下一篇: hdu5386(暴力)