您的位置:首页 > 其它

杭电1209

2016-05-23 16:58 260 查看
题目很简单,找出时针和分针相对于12转动的度数,相减后去绝对值,判断是否大于180,若大于用360减去该值即得最终结果。
需要注意的是在排序时存在角度相同而时间不同的情况,这个时候需要将时间小的放到时间大的前面。因为这个错了很多次!


#include<iostream>
#include<string>
using namespace std;
void sort(string time[], double angle[], int n);
void swap_time(string time[], int x, int y);
void swap_angle(double angle[], int x, int y);
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
string time[5];
double angle[5];
double  h, m;

for (int j = 0; j < 5; j++)
{
cin >> time[j];
h = (time[j][0] - '0') * 10 + (time[j][1]-'0');
m = (time[j][3] - '0') * 10 + (time[j][4] - '0');
h = (h * 30 + m /2.0);//时针相对于12移动的角度
m = m * 6;//分针相对于12移动的角度
if (h > 360)
h = h - 360;
angle[j] = (h - m) < 0 ? m - h : h - m;
if (angle[j] >= 180)
angle[j] =360-angle[j];
}

//test:
/*for (int j = 0; j < 5; j++)
cout << angle[j] << " ";
cout << endl;*/
sort(time, angle, 5);
cout << time[2] << endl;

}
return 0;
}

void sort(string time[], double angle[], int n)
{
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (angle[j] < angle[i])
{
swap_time(time, i, j);
swap_angle(angle, i, j);
}
for (int i = 0; i < n; i++)//若角度相同,按时间排序。
for (int j = i + 1; j < n;j++)
if (angle[i] == angle[j] && time[i]>time[j])
{
swap_time(time, i, j);
swap_angle(angle, i, j);
}
}
void swap_time(string time[], int x, int y)
{
string temp = time[x];
time[x] = time[y];
time[y] = temp;
}
void swap_angle(double angle[], int x, int y)
{
double temp = angle[x];
angle[x] = angle[y];
angle[y] = temp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: