• 1028. List Sorting (25)


    距离PAT考试还有18天最重要的是做透每一题

    这一题比较简单

    不过也有学到的东西

    一个是sort的第三个参数  可以是 一个函数指针也可以是一个函数对象     代码来自网络

    // sort algorithm example
    #include <iostream>     // std::cout
    #include <algorithm>    // std::sort
    #include <vector>       // std::vector
    
    bool myfunction (int i,int j) { return (i<j); }
    
    struct myclass {
      bool operator() (int i,int j) { return (i<j);}
    } myobject;
    
    int main () {
      int myints[] = {32,71,12,45,26,80,53,33};
      std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33
    
      // using default comparison (operator <):
      std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33
    
      // using function as comp
      std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
    
      // using object as comp
      std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)
    
      // print out content:
      std::cout << "myvector contains:";
      for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
        std::cout << ' ' << *it;
      std::cout << '
    ';
    
      return 0;
    }

    另一个是strcmp函数  比较两个c字符串的函数当两个字符串相等时就返回0第一个较小时(比较ASCII)返回值小于0

    思路:

    用结构体存储得到的元素

    并用sort函数排序重点是cmp函数的编写

    #include <cstdio>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    int n,c;
    struct Re{
      int id;
      char name[10];
      int grade;
      
      Re(){
        id =0;
        for(int i=0;i<10;i++) name[i]='';
        grade=0;
      }
    };
    vector<Re> rv;
    
    bool cmp1(Re r1,Re r2) {
      return r1.id<r2.id;
    }
    bool cmp2(Re r1,Re r2) {
      if(strcmp(r1.name,r2.name) < 0){
        return true;
      } else if(strcmp(r1.name,r2.name) == 0) {
        return r1.id < r2.id;
      }
      return false;
    }
    bool cmp3(Re r1,Re r2) {
      if(r1.grade == r2.grade) {
        return r1.id < r2.id;
      }
      return r1.grade<r2.grade;
    }
    
    int main() {
      scanf("%d %d",&n,&c);
      
      for(int i =0;i<n;i++) {
        Re re;
        scanf("%d",&(re.id));
        scanf("%s",&(re.name[0]));
        scanf("%d",&(re.grade));
        
        rv.push_back(re);
      }
      
      switch (c) {
      case 1:
        sort(rv.begin(),rv.end(),cmp1);
        break;
      case 2:
        sort(rv.begin(),rv.end(),cmp2);
        break;
      case 3:
        sort(rv.begin(),rv.end(),cmp3);
        break;
      }
      for(int i=0;i<rv.size();i++){
        printf("%06d %s %d
    ",rv[i].id,rv[i].name,rv[i].grade);
      }
      return 0;
    }

  • 相关阅读:
    正则表达式的点星匹配
    好玩Python——PIL项目实训(四)
    mysql中正则表达式使用学习记录
    linux下每个目录文件的作用
    彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑
    获取APP包名和ACtivity名的方法
    mysql 中 王数据表中插入中文字段报错:mysql> insert into a values(202,"王一"); ERROR 1366 (HY000): Incorrect string value: 'xE7x8Ex8BxE4xB8x80' for column 'tname' at row 1
    linux系统下安装mysql
    测试人员初步分析BUG原因--转载
    PC端通过ADB命令 无线向 andriod端发送文件
  • 原文地址:https://www.cnblogs.com/tclan126/p/8486131.html
Copyright © 2020-2023  润新知