ccf考试201812_3之 CIDR合并

在这里插入图片描述
代码评分:60

总结:考场中这种代码的工程量很大,需要不断地调试很费时间,不如得一部分分数就放手

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class test2 {
    public static void main(String[] args) {
        //1.初始化数据
        Scanner scanner = new Scanner(System.in);
       int num = scanner.nextInt(); //数据条数

        List<IPClass> ip_list = new ArrayList<IPClass>(); //存放ip的list

        //2.将输入的数据标准化
        String inputIP;
        for (int i = 0; i < num ; i++) {
            inputIP = scanner.next();

            //可能有三种数据类型:
            //标准型,不需要变化
            //省略后缀,补上后缀
            //省略长度,补上长度
            if (inputIP.contains("/")) {
                String[] ip_length = inputIP.split("/");
                String[] ip = ip_length[0].split("\\.");
                if (ip.length == 4){ //标准型
                    ip_list.add(new IPClass(ip[0],ip[1],ip[2],ip[3],ip_length[1]));
                }else { //省略后缀
                    String[] ip_temp = new String[4];
                    for (int j = 0; j < ip.length ; j++) {
                        ip_temp[j] = ip[j];
                    }
                    for (int j = ip.length; j <4; j++) {
                        ip_temp[j] = "0";
                    }
                    IPClass ipClass = new IPClass(ip_temp[0],ip_temp[1],ip_temp[2],ip_temp[3],ip_length[1]);

                    ip_list.add(ipClass);//加入list
                }
            }else {//省略长度
                String[] ip = inputIP.split("\\.");
                //得到省略的长度
                int length = ip.length*8;
                //补充后缀
                String[] ip_temp = new String[4];
                for (int j = 0; j < ip.length ; j++) {
                    ip_temp[j] = ip[j];
                }
                for (int j = ip.length; j <4; j++) {
                    ip_temp[j] = "0";
                }
                IPClass ipClass = new IPClass(ip_temp[0],ip_temp[1],ip_temp[2],ip_temp[3],length+"");
                ip_list.add(ipClass);
            }
        }

        //3.排序ip第一关键字,长度第二关键字
        List<IPClass> list_result1 = new ArrayList<IPClass>();  //用于存储排序的结果
        while (ip_list.size() != 0){
            //找到ip_list中最下的元素,
            IPClass ipClass_min = new IPClass("256","256","256","256","32");
            for (IPClass ipClass: ip_list) {
                if(ipClass_min.compareTo(ipClass) > 0){
                    ipClass_min = new IPClass(ipClass.ip_1,ipClass.ip_2,ipClass.ip_3,ipClass.ip_4,ipClass.length);
                }
            }

            //最小的而元素从ip_list中删除,加入到list_result1
            ip_list.remove(ipClass_min);
            list_result1.add(ipClass_min);
        }

        //输出结果
        for (int i = 0; i < list_result1.size(); i++) {
            System.out.println(list_result1.get(i));
        }
    }

    static class IPClass{
        String ip_1;
        String ip_2;
        String ip_3;
        String ip_4;
        String length;

        public IPClass(String ip_1,String ip_2,String ip_3,String ip_4,String length){
            this.ip_1 = ip_1;
            this.ip_2 = ip_2;
            this.ip_3 = ip_3;
            this.ip_4 = ip_4;
            this.length = length;
        }

        public IPClass(){

        }

        @Override
        public boolean equals(Object obj) {
            if(this.ip_1 == ((IPClass) obj).ip_1
                    && this.ip_2 == ((IPClass) obj).ip_2
                    && this.ip_3 == ((IPClass) obj).ip_3
                    && this.ip_4 == ((IPClass) obj).ip_4
                    && this.length == ((IPClass) obj).length
            ){
                return true;
            }
            return false;
        }

        @Override
        public String toString() {
            return ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"/"+length;
        }

        //返回-1表示this小于object
        public int compareTo(IPClass o) {
            //根绝ip_1到length得优先级挨个比较
            if(Integer.parseInt(this.ip_1) < Integer.parseInt(o.ip_1)){
                return -1;
            }else if(Integer.parseInt(this.ip_1) == Integer.parseInt(o.ip_1)){
                if(Integer.parseInt(this.ip_2) < Integer.parseInt(o.ip_2)) {
                    return -1;
                }else if(Integer.parseInt(this.ip_2) == Integer.parseInt(o.ip_2)) {
                    if(Integer.parseInt(this.ip_3) < Integer.parseInt(o.ip_3)){
                        return -1;
                    }else if(Integer.parseInt(this.ip_3) == Integer.parseInt(o.ip_3)){
                        if(Integer.parseInt(this.ip_4) < Integer.parseInt(o.ip_4)){
                            return -1;
                        }else if(Integer.parseInt(this.ip_4) == Integer.parseInt(o.ip_4)){
                            if(Integer.parseInt(this.length) < Integer.parseInt(o.length)){
                                return -1;
                            }
                        }
                    }
                }
            }

            return 1;
        }
    }
}
ccf_offline_stage1_train.csv是中国计算机大赛(CCF)的离线阶段一训练数据集。该数据集是CCF比赛组织方提供给参赛选手进行机器学习和数据挖掘训练的文件。 此数据集包含了2016年至2017年之间顾客线下购买行为的信息。具体而言,它包含了购买券的用户ID、商户ID、交易时间、优惠券ID以及是否使用优惠券等信息。 通过这个数据集,我们可以进行很多有趣的分析和预测。例如,我们可以利用用户的购买行为,预测用户对不同商户的购买意愿,从而帮助商户制定更加精准的促销策略。我们还可以通过分析使用优惠券与不使用优惠券之间的购买行为差异,评估优惠券的推广效果。此外,我们可以根据用户的购买行为数据,对用户进行分类,从而进一步了解不同类型用户的消费习惯。 当然,使用这个数据集进行分析也存在一些挑战和限制。首先,它只包含了线下购买行为的信息,而忽略了线上购买行为。其次,数据集中的一些特征可能存在缺失或错误,需要在使用前进行数据清洗和预处理。此外,数据集的规模可能相对较小,可能需要进一步收集更多样本进行分析和训练。 总之,ccf_offline_stage1_train.csv是一个有价值的数据集,可以被用来进行用户行为分析、预测和商业决策支持。通过深入挖掘这些数据,我们可以更好地理解顾客行为,并制定更有效的营销策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值