1028. List Sorting (25)

Posted lan126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 << \'\\n\';

  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]=\'\\0\';
    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\\n",rv[i].id,rv[i].name,rv[i].grade);
  }
  return 0;
}

 

以上是关于1028. List Sorting (25)的主要内容,如果未能解决你的问题,请参考以下文章

1028 List Sorting (25 分)

PAT 甲级 1028 List Sorting (25 分)(排序,简单题)

PAT Advanced 1028 List Sorting (25分)

PAT甲级 1028 List Sorting (25分)(cin cout 超时问题)

1028 List Sorting (25 分) 难度: 简单 / 知识点: 排序

PAT 1028 List Sorting