• PAT:1028. 人口普查(20) AC


    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    struct STU
    {
      char mname[10];
      int y,m,d;
    }tmp,old,young,left,right;
     
    void init()
    {
      old.y=right.y=2014;
      young.y=left.y=1814;
      old.m=right.m=young.m=left.m=9;
      old.d=right.d=young.d=left.d=6;
    }
    
    bool isless2014(STU a,STU b)      //判断是否超过2014,9,6  判断a是不是小于b
    {
      if(a.y!=b.y)
        return a.y<=b.y;
      else
        if(a.m!=b.m)
          return a.m<=b.m;
        else
          return a.d<=b.d;
    }
    
    bool ismore1814(STU a, STU b)      //判断是否不到1814,9,6   判断a有没有超过b
    {
      if(a.y!=b.y)
        return a.y>=b.y;
      else
        if(a.m!=b.m)
          return a.m>=b.m;
        else
          return a.d>=b.d;
    }
    
    int main()
    {
      init();
      int n;
      scanf("%d",&n);
      int num=0;
      for(int i=0 ; i<n ; ++i)                //输入一个,判断一个。不需要存储后排序
      {
        scanf("%s %d/%d/%d",&tmp.mname,&tmp.y,&tmp.m,&tmp.d);
      
        if(isless2014(tmp,right) && ismore1814(tmp,left))        //判断合法性
        {
          ++num;
          if(isless2014(tmp,old))              //tmp比old更早,更新old
            old=tmp;
          if(ismore1814(tmp,young))            //tmp比young更晚,更新young
            young=tmp;
        }
      }
      if(num==0)          //【warning】可能全部都不合法,输出0
        printf("0");
      else
        printf("%d %s %s",num,old.mname,young.mname);
      system("pause");
      return 0;
    }
    
    
    /*失败的方式,判断边界十分复杂
    
    bool cmp(STU a,STU b)        //【skill】使用sort函数自己构造比较
    {
      if(a.y!=b.y)          //按年月日大小排序
        return a.y>b.y;
      else
        if(a.m!=b.m)
          return a.m>b.m;
        else
          return a.d>b.d;
    }
    STU arr[100050];
    int main()
    {
    
      memset(arr,0,sizeof(arr));
      int n;
      scanf("%d",&n);
      for(int i=0 ; i<n ; ++i)
      {
        scanf("%s %d/%d/%d",&arr[i].mname,&arr[i].y,&arr[i].m,&arr[i].d);
      }
      sort(arr,arr+n,cmp);
      STU old,young;
      int tag=0,sum=0,last=-1;
      for(int i=0 ; i<n ; ++i)      //找最老
      {
        if(arr[i].y<1814)
        else 
        {
          if(arr[i].m>=9)
          
            if(arr[i].d>=6)
              if(arr[i].y<=2014)
                if(arr[i].m<=9)
                  if(arr[i].d<=6)
                  {
                    if(0==tag)
                    {
                      strcpy(old.mname,arr[i].mname);    //其实这里是young
                      tag=1;
                    }
                  ++sum;
                  last=i;
                  }
      }
      printf("%d %s %s",sum,old.mname,arr[last].mname);
    
    */
  • 相关阅读:
    Ajax 传递json字符串到客户端时报 Internal server error
    Java 判断字符串的存储长度
    5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
    databales详解(一)
    JQuery总结
    《JavaScript 高级程序设计》总结
    ASP.NET MVC中controller和view相互传值的方式
    Jquery tmpl详解
    @section script{}的使用
    messager(消息窗口)
  • 原文地址:https://www.cnblogs.com/Evence/p/4295788.html
Copyright © 2020-2023  润新知