目录
有一个网络日志,记录了网络中计算任务的执行情况,每个计算任务对应一条如下形式的日志记录: “hs_10000_p”是计算任务的名称, “2007-01-17 19:22:53,315”是计算任务开始执行的时间“年-月-日 时:分:秒,毫秒”, “253.035(s)”是计算任务消耗的时间(以秒计) hs_10000_p 2007-01-17 19:22:53,315 253.035(s) 请你写一个程序,对日志中记录计算任务进行排序。 时间消耗少的计算任务排在前面,时间消耗多的计算任务排在后面。 如果两个计算任务消耗的时间相同,则将开始执行时间早的计算任务排在前面。
日志中每个记录是一个字符串,每个字符串占一行。最后一行为空行,表示日志结束。日志中最多可能有10000条记录。 计算任务名称的长度不超过10,开始执行时间的格式是YYYY-MM-DD HH:MM:SS,MMM,消耗时间小数点后有三位数字。 计算任务名称与任务开始时间、消耗时间之间以一个或多个空格隔开,行首和行尾可能有多余的空格。
排序好的日志记录。每个记录的字符串各占一行。 输入的格式与输入保持一致,输入包括几个空格,你的输出中也应该包含同样多的空格。
输入:
hs_10000_p 2007-01-17 19:22:53,315 253.035(s) hs_10001_p 2007-01-17 19:22:53,315 253.846(s) hs_10002_m 2007-01-17 19:22:53,315 129.574(s) hs_10002_p 2007-01-17 19:22:53,315 262.531(s) hs_10003_m 2007-01-17 19:22:53,318 126.622(s) hs_10003_p 2007-01-17 19:22:53,318 136.962(s) hs_10005_m 2007-01-17 19:22:53,318 130.487(s) hs_10005_p 2007-01-17 19:22:53,318 253.035(s) hs_10006_m 2007-01-17 19:22:53,318 248.548(s) hs_10006_p 2007-01-17 19:25:23,367 3146.827(s)输出:
hs_10003_m 2007-01-17 19:22:53,318 126.622(s) hs_10002_m 2007-01-17 19:22:53,315 129.574(s) hs_10005_m 2007-01-17 19:22:53,318 130.487(s) hs_10003_p 2007-01-17 19:22:53,318 136.962(s) hs_10006_m 2007-01-17 19:22:53,318 248.548(s) hs_10000_p 2007-01-17 19:22:53,315 253.035(s) hs_10005_p 2007-01-17 19:22:53,318 253.035(s) hs_10001_p 2007-01-17 19:22:53,315 253.846(s) hs_10002_p 2007-01-17 19:22:53,315 262.531(s) hs_10006_p 2007-01-17 19:25:23,367 3146.827(s)
AC代码~
#include <stdio.h>
#include<string.h>
typedef struct encode {
char s[100];
char name[40];
char start[40];
double time;
} enco;
int cmp(enco a, enco b) {
if (a.time != b.time) {
if (a.time > b.time)
return 1;
else
return 0;
}
if (a.start > b.start)
return 1;
else
return 0;
}
void Sort(enco a[], int n) {
for (int i = n - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (cmp(a[j], a[j + 1])) {
enco tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
}
enco a[10000];
int main() {
int i = 0;
char name[20], start1[40], start2[40];
double time;
int n = 0;
while (gets(a[i].s) && strlen(a[i].s) != 0) {
sscanf(a[i].s, "%s%s%s%lf", name, start1, start2, &a[i].time);
strcat(start1, start2);
strcpy(a[i].start, start1);
i++;
n++;
}
Sort(a, n);
for (int i = 0; i < n; i++)
printf("%s\n", a[i].s);
return 0;
}