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;
        }
    }
}
全部评论

相关推荐

nbdy:字太多了,写简历不是写自传,亮点难点技能点列出来就行,要简明扼要
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务