解题思路:
首先,给出的代码使用了结构体Time来表示时间,结构体中包含了时、分、秒三个成员变量。然后,使用std::sort函数对时间数组进行排序,排序的依据是自定义的cmp比较函数。
在cmp函数中,首先比较两个时间的时,如果不相等则按照小时升序排序,相等则继续比较分钟,再相等则比较秒。这样可以保证整个数组按照时间升序排列。
最后,遍历排序后的数组,按照格式输出时间。
由于你没有学习结构体,我可以给你提供两种改进的解法:
解法一:使用二维数组存储时间#include <stdio.h>#include <algorithm>int main() { int n; scanf("%d", &n); int t[n][3]; // 使用二维数组存储时间 for (int i = 0; i < n; i++) { scanf("%d%d%d", &t[i][0], &t[i][1], &t[i][2]); } std::sort(t, t + n); // 直接使用默认的升序排序 for (int i = 0; i < n; i++) { printf("%d %d %d\n", t[i][0], t[i][1], t[i][2]); } return 0;}
解法二:使用三个数组分别存储时、分、秒#include <stdio.h>#include <algorithm>int main() { int n; scanf("%d", &n); int hour[n], minute[n], second[n]; // 使用三个数组分别存储时、分、秒 for (int i = 0; i < n; i++) { scanf("%d%d%d", &hour[i], &minute[i], &second[i]); } // 使用自定义的比较函数cmp进行排序 std::sort(hour, hour + n); std::sort(minute, minute + n); std::sort(second, second + n); for (int i = 0; i < n; i++) { printf("%d %d %d\n", hour[i], minute[i], second[i]); } return 0;}
以上是两种改进的解法,分别使用二维数组和三个数组来存储时间,并且使用默认的升序排序或分别对时、分、秒进行排序。希望对你有帮助!如果你还有其他问题,请随时提出。
球一个最佳答案谢谢啦!这对我非常重要! |