1. 程式人生 > >HDU 1234 開門人和關門人

HDU 1234 開門人和關門人

剛發現,做的這幾道浙大複試上機題我都是用結構體完成的

用結構體做的,或許有其他更好的方法


開始:小時不同時誰小誰最早,小時相同比較分鐘,分鐘相同比較秒.....

結束:小時不同時誰大誰最晚,小時相同比較分鐘,分鐘相同比較秒.....


#include<stdio.h>

struct start {
  int h;
  int m;
  int s;
};

struct time {
  char ch[20];
  struct start b;
  struct start f;
}Time[1000];

int main(void)
{
  int n;
  scanf("%d", &n);
  while (n--) {
    int num;
    struct time min, max;
    int minPos, maxPos;
    scanf("%d", &num);
    scanf("%s %d:%d:%d %d:%d:%d", Time[0].ch, &Time[0].b.h, &Time[0].b.m, &Time[0].b.s,
            &Time[0].f.h, &Time[0].f.m, &Time[0].f.s);
    min = max = Time[0];
    for (int i = 1; i < num; i++) {
      scanf("%s %d:%d:%d %d:%d:%d", Time[i].ch, &Time[i].b.h, &Time[i].b.m, &Time[i].b.s,
            &Time[i].f.h, &Time[i].f.m, &Time[i].f.s);

      if (Time[i].b.h < min.b.h || (Time[i].b.h == min.b.h && Time[i].b.m < min.b.m) || (
            Time[i].b.h == min.b.h && Time[i].b.m == min.b.m && Time[i].b.s < min.b.s)) {
        min =Time[i];
        minPos = i;
      }

      if (Time[i].f.h > max.f.h || (Time[i].f.h == max.f.h && Time[i].f.m > max.f.m) || (
            Time[i].f.h == max.f.h && Time[i].f.m == max.f.m && Time[i].f.s > max.f.s)) {
        max =Time[i];
        maxPos = i;
      }
    }
    printf("%s %s\n", min.ch, max.ch);
  }
  return 0;
}