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): 8880    Accepted Submission(s): 4607


    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
     
    Source
    代码:

    #include "stdio.h"
    #include "malloc.h"
    #include "string.h"

    int main()
    {  int n;
    int k,r;
    int i;
    int m;
    char (*a)[16],(*b)[10],(*c)[10];
    char ma[10],mi[10];
       scanf("%d",&m);
       while(m--)
      { scanf("%d",&n);
        a=(char (*)[16])malloc(sizeof(char)*n*16);    //申请动态的二维数组
       b=(char (*)[10])malloc(sizeof(char)*n*10);
       c=(char (*)[10])malloc(sizeof(char)*n*10);
       k=0;     //注意:k和r一定要赋初值
       r=0;
       for(i=0;i<n;i++)
        {scanf("%s",a[i]);
        scanf("%s",b[i]);
        scanf("%s",c[i]);
        }
        strcpy(ma,b[0]);
         strcpy(mi,c[0]);
         for(i=0;i<n;i++)
          {if(strcmp(ma,b[i])>0)
          {strcpy(ma,b[i]);
          k=i;
          }
          }
         for(i=0;i<n;i++)
          {if(strcmp(mi,c[i])<0)
          {strcpy(mi,c[i]);
          r=i;
          }
          }
          printf("%s ",a[k]);
          printf("%s",a[r]);
          printf(" ");
          free(a);    //最后申请完动态数组后一定要释放
          free(b);
          free(c);
         
          }
          return 0;
    }

    动态数组如何申请:

    一维数组的申请: 

    #include <stdio.h>
    #include <malloc.h>
    int main(){
    int n;
    scanf(“%d”, &n);
    double *shzu
    = (double *) malloc(sizeof(double) * n);
    … …
    free(shuzu);
    return 0;
    }
     
    以poj1047 走路与骑车

    2703:骑车与走路

    总时间限制:
    1000ms
    内存限制:
    65536kB
    描述
    在北大校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间.假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米.请判断走不同的距离去办事,是骑车快还是走路快.
    输入
    第一行为待处理的数据的数量n
    其后每一行整数为一次办事要行走的距离,单位为米.
    输出
    对应每个整数,如果骑车快,输出一行"Bike";如果走路快,输出一行"Walk";如果一样快,输出一行"All".
    样例输入
    4
    50
    90
    120
    180
    样例输出
    Walk
    Walk
    Bike
    Bike



    思路:由于n没有上限,故这里采用一维动态数组:
    这是假定 n=10  
    #include <stdio.h>                    用完动态数组后是这样:  
    #define N 10                                                     
    void compute(int distance);
    int main(){
    int n;
    int distance[N];
    int i;
    scanf("%d", &n);
    for(i = 0; i < n; i++){
    scanf("%d", &(distance[i]));
    }
     
    for(i = 0; i < n; i++){
    compute(distance[i]);
    }
    return 0;
    }
      
    void compute(int distance){
     
    int timeBike = 27 + 23 + distance/3;
     
    int timeWalk = (int)(distance/1.2);
     
    if(timeBike < timeWalk){
    printf("Bike ");
    } else if (timeBike > timeWalk){
    printf("Walk ");
    } else {
    printf("All ");
    }
     
    }
      用完动态数组后是这样:  
     

    #include <stdio.h>

    #include <malloc.h>     //

    void compute(int distance);

    int main(){

    int n;

    int i;

    scanf("%d", &n);

    int *distance = (int *) malloc(sizeof(int)*n);  //

    for(i = 0; i < n; i++){

    scanf("%d", &(distance[i]));

    }

     

    for(i = 0; i < n; i++){

    compute(distance[i]);

    }

    free(distance);

    return 0;

    }

    #include "stdio.h"
    #include "malloc.h"
    int main()
    { int i,j,k;
      int n;
       void compete(int x);
      scanf("%d",&n);
      int *a=(int *)malloc(sizeof(int)*n);
      for(i=0;i<n;i++)
        {scanf("%d",&a[i]);
        }
        for(i=0;i<n;i++)
         {compete(a[i]);
         }
       
         return 0;
        
      }
      void compete(int x)
       {int k,m;
        k=27+23+x/3;
        m=(int)(x/1.2);
        if(k<m)
        printf("Bike ");
        if(k>m)
        printf("Walk ");
        if(k==m)
        printf("All ");
        }方法e二:

    #include "stdio.h"
    #include "malloc.h"
    int main()
    { int i,j,k;
      int n;
       void compete(int x);
      scanf("%d",&n);
      int *a=(int *)malloc(sizeof(int)*n);
      for(i=0;i<n;i++)
        {scanf("%d",&a[i]);
        }
        for(i=0;i<n;i++)
         {compete(a[i]);
         } return 0;
        
      }
      void compete(int x)
       {double k,m;
        k=27+23+x/3.0;
        m=x/1.2;
        if(k<m)
        printf("Bike ");
        if(k>m)
        printf("Walk ");
        if(k==m)
        printf("All ");
        }

     

    注意这俩种方法的不同在于compete函数中int 与 double 的区别,原因是:第一种k的表达式中除的是3.我们知道在c语言中整数除以整数还是整数,故要将 m=(int)(x/1.2);转换成int型。同理也可已解释为什么改成double也可以了      呵呵

     二维数组


    使用的时候就和一般的二维数组一样。
    举个例子给你:
    #include "stdlib.h"
    #include "stdio.h"
    #include <malloc.h>

    int main()
    {
    int i,j;
    int n;//这个就是需要指定的行数
    int (*p)[10];

    scanf("%d",&n);//取得行数

    //动态生成二维数组,指定列数为10,如果想改,自己该里面
    的参数,如果想定义n行2列就为: p=(int (*)[2])malloc(n*2*sizeof(int));
    p=(int (*)[10])malloc(n*10*sizeof(int)); //动态申请n行10列的二维数组

    for(i=0;i<n;i++)
    for(j=0;j<10;j++)
    p[i][j]=i*j;

    for(i=0;i<n;i++)
    {
    for(j=0;j<10;j++)
    printf("%d,",p[i][j]);

    printf(" ");
    }
    free(p);

    return 0;
    }

     
  • 相关阅读:
    485串口接线
    mvc3 升级mvc5
    VB连接ACCESS数据库,使用 LIKE 通配符问题
    VB6 读写西门子PLC
    可用的 .net core 支持 RSA 私钥加密工具类
    解决 Win7 远程桌面 已停止工作的问题
    解决 WinForm 重写 CreateParams 隐藏窗口以后的显示问题
    解决安装 .net framework 发生 extracting files error 问题
    CentOS7 安装配置笔记
    通过特殊处理 Resize 事件解决 WinForm 加载时闪烁问题的一个方法
  • 原文地址:https://www.cnblogs.com/songmingtao/p/3223445.html
Copyright © 2011-2022 走看看