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;
    }

     
  • 相关阅读:
    振动传感器
    水银开关式碰撞传感器
    倾斜传感器
    光敏传感器
    激光传感器的使用
    html字符串 转 json
    浏览器播放视频加快进功能
    处理箭头函数单个参数括号规则冲突
    VUE-directive指令之语法、引用、钩子函数、参数
    win10系统自动升级怎么还原到以前的系统
  • 原文地址:https://www.cnblogs.com/songmingtao/p/3223445.html
Copyright © 2011-2022 走看看