Description
安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号码大小进行排序。身份证号码为18位的数字组成,出生日期为第7到第14位
Input
第一行一个整数n,表示有n个身份证号码
余下的n行,每行一个身份证号码。
Output
按出生日期从大到小排序后的身份证号,每行一条
Sample Input 1
5 466272307503271156 215856472207097978 234804580401078365 404475727700034980 710351408803093165
Sample Output 1
404475727700034980 234804580401078365 215856472207097978 710351408803093165 466272307503271156
Hint
HINT:时间限制:1.0s 内存限制:256.0MB
n<=100000
个人的思路:
使用sort方法(头文件<algorithm>里的)来进行排序,我就不多写一个排序方法的函数了,其实就是节选出一个字符串的段落来进行排序而已。
通关代码:
#include <iostream>
#include <algorithm>
#include <string>
#include <stdio.h>
using namespace std;
bool compare(string a, string b) {
string temp1 = a.substr(6, 8);
string temp2 = b.substr(6, 8);
if (temp1 == temp2) {
return a > b;
}
else return temp1 > temp2;
}
int main() {
int num;
cin >> num;
string IDNumber[100000];
for (int i = 0; i < num; i++) {
cin >> IDNumber[i];
}
sort(IDNumber, IDNumber + num, compare);
for (int k = 0; k < num; k++) {
cout << IDNumber[k] << endl;
}
}
这个题我依然写了java版本,可以用,但是格式无法提交OJ噢。
排序方法单独放在一个类里
import java.util.Comparator;
public class IDNumberSorting {
static Comparator<String> compare = new Comparator<String>() {
@Override
public int compare(String a, String b) {
String temp1 = a.substring(6,14);
String temp2 = b.substring(6,14);
if(temp1.equals(temp2)){
return a.compareTo(b);
}
else{
return temp2.compareTo(temp1);
}
}
};
}
测试类:
package com_Luna_IDNumberSort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
import static com_Luna_IDNumberSort.IDNumberSorting.compare;
public class Text {
public static void main(String[] args) {
int num;
Scanner scanner = new Scanner(System.in);
num = scanner.nextInt();
ArrayList<String> List = new ArrayList<>();
for (int i = 0; i < num; i++) {
String s = scanner.next();
List.add(s);
}
Collections.sort(List,compare);
for (int i = 0; i < List.size(); i++) {
System.out.println(List.get(i));
}
}
}