zoukankan      html  css  js  c++  java
  • 开门人和关门人-hdu-1234

    开门人和关门人

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 8878    Accepted Submission(s): 4605

    Problem Description

    每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签
    到、签离记录,请根据记录找出当天开门和关门的人。

     

     

    Input

    测试输入的第一行给出记录的总天数N ( > 0 )。下面列出了N天的记录。
    每天的记录在第一行给出记录的条目数M ( > 0 ),下面是M行,每行的格式为

    证件号码 签到时间 签离时间

    其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。

     

     

    Output

    对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。
    注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,
    且没有多人同时签到或者签离的情况。

     

     

    Sample Input

    3

    1

    ME3021112225321 00:00:00 23:59:59

    2

    EE301218 08:05:35 20:56:35

    MA301134 12:35:45 21:40:42

    3

    CS301111 15:30:28 17:00:10

    SC3021234 08:00:00 11:25:25

    CS301133 21:45:00 21:58:40

     

     

    Sample Output

    ME3021112225321 ME3021112225321

    EE301218 MA301134

    SC3021234 CS301133

     

    解题思路:

       1、用三个(字符串)二维数组保存数据(方便取所需数据的编号);2、找出签到时间最小的编号(b[i]的i)找出签退时间最大的编号(c[i]的i)3、输出编号所对应的的证件号码即可(a[i].a[i])

    /*动态数组

    #include<stdio.h>

    #include<string.h>

    #include<malloc.h>

    int main()

    {

      //char a[10000][20],b[10000][20],c[10000][20];

      char (*b)[20],(*c)[20];

      char s[20],f[20];

      char (*a)[20];

      int i,j,k,n,t;

      scanf("%d",&n);

      while(n--)

      {

       scanf("%d",&t);

       a=(char(*)[20])malloc(sizeof(char)*t*20);

       c=(char(*)[20])malloc(sizeof(char)*t*20);

       b=(char(*)[20])malloc(sizeof(char)*t*20);

       scanf("%s %s %s",a[0],b[0],c[0]);

       for(i=1,j=0,k=0;i<t;i++)

       {

         scanf("%s %s %s",a[i],b[i],c[i]);

         if(strcmp(b[0],b[i])>0)   //若 b[i]小,则把 i 的值保存。

          {

          k=i;strcpy(b[0],b[i]);}       //并把b[i]的值赋给b[0];但此时k的值是 上次最小也就是  i的值,所以不需要  else

          if(strcmp(c[0],c[i])<0)

          {

          j=i;strcpy(c[0],c[i]);}

       }

       printf("%s %s ",a[k],a[j]);

      }

      free(a);

      free(b);

      free(c);

      return 0;

    }

    */

    #include<stdio.h>

    #include<string.h>

    int main()

    {

      char a[10000][20],b[10000][20],c[10000][20],s[20],f[20];

      int i,j,k,n,t;

      scanf("%d",&n);

      while(n--)

      {

       scanf("%d",&t);

       scanf("%s %s %s",a[0],b[0],c[0]);

       for(i=1,j=0,k=0;i<t;i++)

       {

         scanf("%s %s %s",a[i],b[i],c[i]);

         if(strcmp(b[0],b[i])>0)   //若 b[i]小,则把 i 的值保存。

          {

          k=i;strcpy(b[0],b[i]);}       //并把b[i]的值赋给b[0];但此时k的值是 上次最小也就是  i的值,所以不需要  else

          if(strcmp(c[0],c[i])<0)

          {

          j=i;strcpy(c[0],c[i]);}

       }

       printf("%s %s ",a[k],a[j]);

      }

      return 0;

    }

    错误程序:

    /*#include<stdio.h>

    #include<string.h>

    int main()

    {

      char a[10000][20],b[10000][20],c[10000][20],s[20],f[20];

      int i,j,k,n,t;

      scanf("%d",&n);

      while(n--)

      {

       scanf("%d",&t);

       if(t==1)

       printf("%s %s",a[0],a[0]);

       scanf("%s %s %s",a[0],b[0],c[0]);

       for(i=1,j=1,k=0;i<t;i++)

       {

         scanf("%s %s %s",a[i],b[i],c[i]);

         if(strcmp(b[0],b[i])>0)

          {strcpy(s,a[i]);k=i;strcpy(b[0],b[i]);}

         else

          {strcpy(s,a[i-1]);}

          if(strcmp(c[0],c[i])<0)

          {strcpy(f,a[i]);j=i;strcpy(c[0],c[i]);}

         else

          {strcpy(f,a[i-1]);} 

       }

       printf("%s %s",a[k],a[j]);

      }

      return 0;

    }*/

  • 相关阅读:
    css选择器
    js中event.target和event.srcElement的区别
    js生成10个20-50之间的随机数(包含20和50)
    chrome jsonView插件安装 在浏览器地址栏里输入接口后返回的json数据格式化
    JS字符串使用占位符轻松实现拼接(来自react源码)
    linux + node + yarn + git + ssh + linux免密登录 + pm2自动部署
    react tab切换 第一次切换到某个页面时会请求数据,以后不会再请求数据
    解决方案:sublime Text 3 无法安装插件有关问题 (JSON文件schema_version问题)
    ES6解构代替concat数组拼接
    2019年最新web前端笔试题
  • 原文地址:https://www.cnblogs.com/zhouhongweihpu/p/3223190.html
Copyright © 2011-2022 走看看