杭电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; }
相关文章推荐
- JavaScript 跨域访问的问题和解决过程
- 解决java.lang.IllegalStateException: Fragment not attached to Activity
- 关于用wubi安装Ubuntu,总是提示“没有定义根文件系统”的问题
- 关于用wubi安装Ubuntu,总是提示“没有定义根文件系统”的问题
- 单例模式
- swift资源库-2-初识UI
- 奋斗吧,程序员——第四十二章 会挽雕弓如满月,西北望,射天狼
- session的使用
- 单例模式
- 关于用wubi安装Ubuntu,总是提示“没有定义根文件系统”的问题
- 关于用wubi安装Ubuntu,总是提示“没有定义根文件系统”的问题
- hive的使用
- Android程序的反破解技术
- vsftpd启动方式改变为xinetd
- Android仿微信界面
- iOS AVplayer 基本使用方法
- Cobbler-自动化部署神器
- 两张图片合成
- java的Arrays工具类实战
- Python列表操作和字符串的常用方法