[C_MM052-易] 垂直的時分針
問題描述 :
有一時鐘僅有分針與時針。請找出某個時段中,時針與分針會幾乎呈現垂直狀態的時刻。幾乎垂直的意思是時分針的夾角介於88度~92度之間都算。
時段的輸入為小時制,共兩個輸入整數,分別代表幾點開始及幾點終止。
該時鐘的分針與時針移動的精確度到1分鐘;亦即,在1小時時段中,分針會走60步,時針亦會走60步,但兩者每步所經過的角度不同。
請注意,不管時針與分針位於何處,其夾角定義在0~180度之間。例如: 11:50的夾角是55度,而非305度; 00:35的夾角是167.5度,而非192.5度。
輸入說明 :
輸入行包含兩個整數,第2個比第1個大.
第1個整數:代表開始時數的整數值,可為0~24。
第2個整數:代表終止時數的整數值,可為1~24。
輸出說明 :
所有符合的時刻及其精確的時分針夾角。
輸出格式: hh:mm xx.xx
其中, hh為小時,個位數前需補0; mm為分鐘,個位數前需補0; xx.xx為浮點數,取小數點兩位,兩者之間以一個空白隔開。
範例 :
有一時鐘僅有分針與時針。請找出某個時段中,時針與分針會幾乎呈現垂直狀態的時刻。幾乎垂直的意思是時分針的夾角介於88度~92度之間都算。
時段的輸入為小時制,共兩個輸入整數,分別代表幾點開始及幾點終止。
該時鐘的分針與時針移動的精確度到1分鐘;亦即,在1小時時段中,分針會走60步,時針亦會走60步,但兩者每步所經過的角度不同。
請注意,不管時針與分針位於何處,其夾角定義在0~180度之間。例如: 11:50的夾角是55度,而非305度; 00:35的夾角是167.5度,而非192.5度。
輸入說明 :
輸入行包含兩個整數,第2個比第1個大.
第1個整數:代表開始時數的整數值,可為0~24。
第2個整數:代表終止時數的整數值,可為1~24。
輸出說明 :
所有符合的時刻及其精確的時分針夾角。
輸出格式: hh:mm xx.xx
其中, hh為小時,個位數前需補0; mm為分鐘,個位數前需補0; xx.xx為浮點數,取小數點兩位,兩者之間以一個空白隔開。
範例 :
Sample Input: | Sample Output: |
12 15 |
12:16 degree=88.00
12:49 degree=90.50
13:22 degree=91.00
14:27 degree=88.50
15:00 degree=90.00
|
0 3 |
00:16 degree=88.00
00:49 degree=90.50
01:22 degree=91.00
02:27 degree=88.50
03:00 degree=90.00
|
- #include <iostream>
- #include <cmath>
- #include<iomanip>
- using namespace std;
- int main() {
- // [C_MM052-易] 垂直的時分針
- int s,e;
- double w_h,w_bh, h, min;
- double degree;
- while(cin >> s >> e) //輸入起始和終止時間
- {
- if(e > s && s >= 0 && s <= 24 && e > 0 && e <=24)
- //輸入行包含兩個整數,第2個比第1個大.
- //第1個整數:代表開始時數的整數值,可為0~24。
- //第2個整數:代表終止時數的整數值,可為1~24。
- {
- for(int i = s; i < e;i++)
- {
- w_h = (i%12)*30; //3:00,9:00
- w_bh = 360-((i%12)*30); //15:00, 21:00
- if(w_h >= 88 && w_h <= 92 && i != s)
- //判斷整點時,垂直也只有3:00,9:00, 15:00, 21:00
- {
- if(i < 10) //個位數要補0
- {
- cout << "0" << i << ":00 degree=" << fixed << setprecision(2) << (double)w_h <<endl ;
- }
- else
- {
- cout << i << ":00 degree=" << fixed << setprecision(2) << (double)w_h <<endl ;
- }
- }
- if(w_bh >= 88 && w_bh <= 92 && i != s)
- {
- if(i < 10)
- {
- cout << "0" << i << ":00 degree=" << fixed << setprecision(2) << (double)w_bh <<endl ;
- }
- else
- {
- cout << i << ":00 degree=" << fixed << setprecision(2) << (double)w_bh <<endl ;
- }
- }
- for(int j = 1;j < 60;j++)
- {
- //時針:i*30+0.5*j
- //分針:6*j
- h = (i%12)*30 + 0.5*j; //時針
- min = 6*j; //分針
- degree = h - min; //角度
- if(degree < 0) //轉成正數
- {
- degree = degree * -1;
- }
- if(degree > 180)
- {
- if( h > 180 || min > 180)
- {
- if(min > 180)
- {
- degree = 360 - min + h;
- }
- else if(h >180)
- {
- degree = 360 - h + min;
- }
- else
- {
- degree = h - min;
- }
- }
- else
- {
- degree = h - min;
- }
- }
- /*cout << i << ":" << j << " degree=" << degree <<endl ;*/
- if(degree >= 88 && degree <= 92)
- {
- if(i < 10 && j < 10)
- {
- cout << "0" << i << ":" << "0" << j << " degree=" << fixed << setprecision(2) << degree <<endl;
- }
- else if(i < 10)
- {
- cout << "0" << i << ":" << j << " degree=" << fixed << setprecision(2) << degree <<endl;
- }
- else if(j < 10)
- {
- cout << i << ":" << "0" << j << " degree=" << fixed << setprecision(2) << degree <<endl;
- }
- else
- {
- cout << i << ":" << j << " degree=" << fixed << setprecision(2) << degree <<endl;
- }
- }
- }
- }
- if(e < 12)
- {
- if((e*30) >= 88 && (e*30) <= 92)
- {
- if(e < 10)
- {
- cout << "0" << e << ":00 degree=" << fixed << setprecision(2) << (double)e*30 <<endl ;
- }
- else
- {
- cout << e << ":00 degree=" << fixed << setprecision(2) << (double)e*30 <<endl ;
- }
- }
- if(360-(e*30) >= 88 && 360-(e*30) <= 92)
- {
- if(e < 10)
- {
- cout << "0" << e << ":00 degree=" << fixed << setprecision(2) << (double)360-(e*30) <<endl ;
- }
- else
- {
- cout << e << ":00 degree=" << fixed << setprecision(2) << (double)360-(e*30) <<endl ;
- }
- }
- }
- else
- {
- if(((e-12)*30) >= 88 && ((e-12)*30) <= 92)
- {
- if(e < 10)
- {
- cout << "0" << e << ":00 degree=" << fixed << setprecision(2) << (double)(e-12)*30 <<endl ;
- }
- else
- {
- cout << e << ":00 degree=" << fixed << setprecision(2) << (double)(e-12)*30 <<endl ;
- }
- }
- if((360-((e-12)*30)) >= 88 && ((360-(e-12)*30)) <= 92 && e != s)
- {
- if(e < 10)
- {
- cout << "0" << e << ":00 degree=" << fixed << setprecision(2) << (double)(360-(e-12)*30) <<endl ;
- }
- else
- {
- cout << e << ":00 degree=" << fixed << setprecision(2) << (double)(360-(e-12)*30) <<endl ;
- }
- }
- }
- }
- }
- return 0;
- }
沒有留言:
張貼留言