|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:https://ac.nowcoder.com/acm/problem/15056
- #include <stdio.h>
- #include <algorithm>
- typedef struct time
- {
- int hour;
- int second;
- int minute;
- }Time;
- int cmp(Time t1,Time t2 )
- {
- if(t1.hour!=t2.hour)
- return t1.hour<t2.hour;
- else
- {
- if(t1.minute!=t2.minute)
- return t1.minute<t2.minute;
- else
- return t1.second<t2.second;
- }
- }
- int main()
- {
- int n;
- scanf("%d",&n);
- Time t[n];
- for(int i=0;i<n;i++)
- {
- scanf("%d%d%d",&t[i].hour,&t[i].minute,&t[i].second);
- }
- std::sort(t,t+n,cmp);
- for(int i=0;i<n;i++)
- {
- printf("%d %d %d\n",t[i].hour,t[i].minute,t[i].second);
- }
- return 0;
- }
复制代码
由于还没有学结构体,可以给一下注释吗,再顺便写一下其他解法,谢谢大佬
这段代码定义了一个结构体Time,包含了时(hour)、分(minute)、秒(second)三个成员变量。然后定义了一个cmp函数,用于排序,按照时、分、秒的顺序进行排序。在主函数中,先输入n个时间,再用sort函数进行排序,最后输出排序后的时间。
除了使用结构体,还可以使用pair来存储时间,然后按照pair的第一个元素和第二个元素进行排序,具体代码如下:
- #include <cstdio>
- #include <algorithm>
- #include <utility>
- using namespace std;
- int main()
- {
- int n;
- scanf("%d", &n);
- pair<pair<int, int>, int> a[n];
- for(int i = 0; i < n; i++)
- {
- scanf("%d%d%d", &a[ i].first.first, &a[ i].first.second, &a[ i].second);
- }
- sort(a, a + n);
- for(int i = 0; i < n; i++)
- {
- printf("%d %d %d\n", a[ i].first.first, a[ i].first.second, a[ i].second);
- }
- return 0;
- }
复制代码
此外,还可以使用结构体的比较运算符重载来进行排序,具体代码如下:
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- struct Time
- {
- int hour, minute, second;
- bool operator < (const Time &t) const
- {
- if(hour != t.hour) return hour < t.hour;
- if(minute != t.minute) return minute < t.minute;
- return second < t.second;
- }
- };
- int main()
- {
- int n;
- scanf("%d", &n);
- Time a[n];
- for(int i = 0; i < n; i++)
- {
- scanf("%d%d%d", &a[ i].hour, &a[ i].minute, &a[ i].second);
- }
- sort(a, a + n);
- for(int i = 0; i < n; i++)
- {
- printf("%d %d %d\n", a[ i].hour, a[ i].minute, a[ i].second);
- }
- return 0;
- }
复制代码
|
|