7-1 sdut-Collection-sort–C~K要找女朋友了! (10 分)
临近11.11,CK看见周围的朋友一个个的都脱单或者正准备脱单了,CK也想要找一个女朋友了(听说国家会分配?)。MeiK听说了这件事情,表示CK终于开悟了,所以他整理了一份候选人名单给CK。可是CK心里有自己心动女生的身高区间和年龄限制,所以他想把符合条件的女生的信息给筛选出来,但是这可是难住了CK,事关C~K的幸福,你能帮帮他吗?
提示:MeiK提供的名单里可能会有重复的女生的信息。
输入格式:
多组输入。
第一行输入MeiK的候选人名单里有N个人(N<100000)。
第二行输入四个整数a,b,c,d。分别表示C~K心动女生的身高的最小值和最大值,年龄的最小值和最大值。(题目保证a<=b,c<=d)
接下来输入N行,每行表示一个女生的信息(姓名,身高,年龄,联系方式)
ps:联系方式不超过11个字符。
输出格式:
对于每一组输入,第一行输出一个n,表示符合条件的女生的数量。
接下来的n行,每一行输出一个符合条件的女生的信息。
输出顺序按身高从低到高排序,若身高相同,则按年龄从高到底排序,若年龄也相同,则按照输入顺序输出。
输入样例:
4
160 170 20 22
女神1 161 19 11111
女神2 167 20 22222
女神2 167 20 22222
女神3 163 21 33333
3
160 170 20 30
CHRR 161 29 22222
MICK 161 29 11111
KATE 161 39 22222
输出样例:
2
女神3 163 21 33333
女神2 167 20 22222
2
CHRR 161 29 22222
MICK 161 29 11111
注意要下标对应!!!!!!
由于要排除输入的是同一个人,所以在输入的时候我们用.nextLine()
直接将一个人的所有信息读入,
再用.split(" ")
通过空格将其分开, 并分别赋值。
将读入的.nextLine()
存入set中,通过set进行筛选相同的人。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
Set<String> set = new HashSet<>();
int n = scanner.nextInt();
int high_low = scanner.nextInt();
int high_top = scanner.nextInt();
int age_low = scanner.nextInt();
int age_top = scanner.nextInt();
String name[] = new String[n];
int height[] = new int[n];
int age[] = new int[n];
String phone[] = new String[n];
int count = 0;//满足的人数
int res[] = new int[n];
Arrays.fill(res, -1);//将res数组中的值全部赋值为-1.
//找出满足要求的人的下标
scanner.nextLine();//吃掉上一个输入的回车。
for (int i = 0; i < n; i++) {
String str =scanner.nextLine();
String[] strings = str.split(" ");
name[i] = String.valueOf(strings[0]);
height[i] = Integer.parseInt(strings[1]);
age[i] = Integer.parseInt(strings[2]);
phone[i] = String.valueOf(strings[3]);
if(!set.contains(str)){
set.add(str);
if (height[i] >= high_low && height[i] <= high_top && age[i] >= age_low && age[i] <= age_top) {
res[i] = i;//记录满足的下标,值与下标相等,列如res[5]=5;
count++;//记录人数
}
}
}
//满足要求的新数组
String new_name[] = new String[count];
int new_height[] = new int[count];
int new_age[] = new int[count];
String new_phone[] = new String[count];
int c = 0;
//进行赋值,按照输入顺序进行排的。
for (int i : res) {
if (i != -1) {
//对满足要求的进行赋值到新数组中
new_name[c] = String.valueOf(name[i]);
new_height[c] = height[i];
new_age[c] = age[i];
new_phone[c] = String.valueOf(phone[i]);
c++;
}
}
//进行排序
for (int i = 0; i < count; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (new_height[j] > new_height[j + 1]) {//按照身高进行升序排序
String st = String.valueOf(new_name[j]);
new_name[j] = String.valueOf(new_name[j + 1]);
new_name[j + 1] = String.valueOf(st);
int hi = new_height[j];
new_height[j] = new_height[j + 1];
new_height[j + 1] = hi;
int ag = new_age[j];
new_age[j] = new_age[j + 1];
new_age[j + 1] = ag;
String ph = String.valueOf(new_phone[j]);
new_phone[j] = String.valueOf(new_phone[j + 1]);
new_phone[j + 1] = String.valueOf(ph);
}
if (new_height[j]==new_height[j+1]){
if(age[j] < age[j+1]){//按照年龄降序排
String st = String.valueOf(new_name[j]);
new_name[j] = String.valueOf(new_name[j + 1]);
new_name[j + 1] = String.valueOf(st);
int hi = new_height[j];
new_height[j] = new_height[j + 1];
new_height[j + 1] = hi;
int ag = new_age[j];
new_age[j] = new_age[j + 1];
new_age[j + 1] = ag;
String ph = String.valueOf(new_phone[j]);
new_phone[j] = String.valueOf(new_phone[j + 1]);
new_phone[j + 1] = String.valueOf(ph);
}
}
}
}
//进行输出
System.out.println(count);
for(int i=0;i<count;i++){
System.out.print(new_name[i]+" "+new_height[i]+" "+new_age[i]+" "+new_phone[i]);
System.out.println();
}
}
}
}