C~K要找女朋友了!!!

本文介绍了一个基于特定条件筛选女生信息的算法实现。该算法通过Java编程语言实现了对候选人名单中符合身高和年龄要求的女生信息进行筛选,并按照指定规则进行排序输出。

Time Limit: 1000 ms Memory Limit: 131072 KiB

Problem Description
临近11.11,C~K看见周围的朋友一个个的都脱单或者正准备脱单了,C~K也想要找一个女朋友了(听说国家会分配?)。MeiK听说了这件事情,表
示C~K终于开悟了,所以他整理了一份候选人名单给C~K。可是C~K心里有自己心动女生的身高区间和年龄限制,所以他想把符合条件的女生
的信息给筛选出来,但是这可是难住了C~K,事关C~K的幸福,你能帮帮他吗?
ps:由于MeiK比较傻,所以名单里可能会有重复的女生的信息,若信息重复,则第一次输入为有效信息。

Input
多组输入。
第一行输入MeiK的候选人名单里有N个人(N<100000)。
第二行输入四个整数a,b,c,d。分别表示C~K心动女生的身高的最小值和最大值,年龄的最小值和最大值。(题目保证a<=b,c<=d)
接下来输入N行,每行表示一个女生的信息(姓名,身高,年龄,联系方式)

ps:联系方式不超过11个字符。

Output

对于每一组输入,第一行输出一个n,表示符合条件的女生的数量。
接下来的n行,每一行输出一个符合条件的女生的信息。
输出顺序按身高从低到高排序,若身高相同,则按年龄从高到底排序,若年龄也相同,则按照输入顺序输出。

Sample Input
4
160 170 20 22
女神1 161 19 11111
女神2 167 20 22222
女神2 167 20 22222
女神3 163 21 33333
Sample Output
2
女神3 163 21 33333
女神2 167 20 22222
Hint
Source
C~K
SDUTACM运维技术中心


import java.util.*;
class girls{
    int height, age;
    static int a, b, c, d;
    String name;
    String sa[];
    girls(String name){
        this.name = name;
        sa = name.split(" ");
        height = Integer.parseInt(sa[1]);
        age = Integer.parseInt(sa[2]);
    }
    boolean judge() {
        if(height >=a && height <= b && age >= c && age <= d) {
            return true;
        }
        return false;
    }
}
public class Main {
    public static void main(String[] args) throws Exception {
        Scanner ss = new Scanner(System.in);
        while(ss.hasNext()) {
            int a, b, c, d, n;
            ArrayList<girls> s = new ArrayList<girls>();
            LinkedList<String> sn = new LinkedList<String>();
            n = ss.nextInt();
            a = ss.nextInt();
            b = ss.nextInt();
            c = ss.nextInt();
            d = ss.nextInt();
            girls.a = a;
            girls.b = b;
            girls.c = c;
            girls.d = d;
            String str;
            //把正数后面的换行读入
            str = ss.nextLine();
            for(int i = 0; i < n; i++) {

                str = ss.nextLine();
                girls p = new girls(str);
                if(!sn.contains(str) && p.judge()) {
                    s.add(p);
                    sn.add(str);
                }
            }
            Collections.sort(s, new Comparator<girls>() {
                //重写比较函数
                public int compare(girls a, girls b) {
                    if(a.height == b.height)
                        return 0;
                    //返回负数置换数据
                    return a.height - b.height;
                }
            });
            System.out.println(s.size());
            //方法一,使用get()方法
            /*for(int i = 0; i < s.size(); i++) {
                System.out.println(s.get(i).name);
            }*/
            //方法二,使用迭代器
            Iterator<girls>it = s.iterator();
            while(it.hasNext()) {
                girls tp = it.next();
                System.out.println(tp.name);
            }
        }
        ss.close();
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值