试题 算法提高 最佳客户
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
XMall正在评选最佳客户,目前有N位客户,他们的最低消费记录为X,最高消费记录为Y,现在我们想要对这些客户进行排序。
1.先按最高消费记录从高到低排序。
2.如相同,按最低消费记录从高到低排序。
3.按姓名的字典序排序
输入格式
输入共N+1行
第1行一个数N
第二行起,每行两个整数X,Y和一个字符串S 代表名字
输出格式
共N行,每行两个整数X,Y和一个字符串S 代表名字
样例输入
3
100 300 Jack
200 300 George
100 300 John
样例输出
200 300 George
100 300 Jack
100 300 John
数据规模和约定
N <= 5000; S 的长度不超过30;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[][] s=new int[n][2];
String[] f=new String[n];
for(int i=0;i<n;i++) {
s[i][0]=scanner.nextInt();
s[i][1]=scanner.nextInt();
f[i]=scanner.next();
}
for(int i=0;i<n-1;i++) {
int flag=0;
for(int j=0;j<n-1-i;j++) {
if(s[j][1]<s[j+1][1]) {
flag=1;
int t=s[j][1];
s[j][1]=s[j+1][1];
s[j+1][1]=t;
t=s[j][0];
s[j][0]=s[j+1][0];
s[j+1][0]=t;
String s1=f[j];
f[j]=f[j+1];
f[j+1]=s1;
}
if(s[j][1]==s[j+1][1]&&s[j][0]<s[j+1][0]) {
flag=1;
int t=s[j][0];
s[j][0]=s[j+1][0];
s[j+1][0]=t;
String s1=f[j];
f[j]=f[j+1];
f[j+1]=s1;
}
if(s[j][0]==s[j+1][0]&&s[j][1]==s[j+1][1]&&f[j].compareTo(f[j+1])==1) {
flag=1;
String s1=f[j];
f[j]=f[j+1];
f[j+1]=s1;
}
}
if(flag==0)
break;
}
for(int i=0;i<n;i++) {
System.out.println(s[i][0]+" "+s[i][1]+" "+f[i]);
}
}
}