题解 | 识别有效的IP地址和掩码并进行分类统计

识别有效的IP地址和掩码并进行分类统计

https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int A = 0;
        int B = 0;
        int C = 0;
        int D = 0;
        int E = 0;
        int wr = 0;
        int pr = 0;
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String a = in.nextLine();
            int index = a.indexOf('~');
            String ip = a.substring(0, index);
            String son = a.substring(index + 1);
            int ipindex = 0;
            int sonindex = 0;
            int[] ipnum = new int[4];
            int[] sonnum = new int[4];
            int ipflag = 0;
            int sonflag = 0;

            for (int i = 0; i < 4; i++) {
                if (ipflag == -1) {
                    continue;
                }
                if (i == 3) {
                    ipnum[i] = Integer.parseInt(ip.substring(ipindex));
                } else {
                    int ipindex1 = ip.indexOf('.', ipindex);
                    if (ipindex1 == ipindex) {
                        ipflag = -1;
                        continue;
                    }
                    ipnum[i] = Integer.parseInt(ip.substring(ipindex, ipindex1));
                    ipindex = ipindex1 + 1;
                }
                // System.out.println(ipnum[i]);
            }

            if (ipnum[0] == 0 || ipnum[0] == 127) continue;

            for (int i = 0; i < 4; i++) {
                if (sonflag == -1) {
                    continue;
                }
                if (i == 3) {
                    sonnum[i] = Integer.parseInt(son.substring(sonindex));
                } else {
                    int sonindex1 = son.indexOf('.', sonindex);
                    if (sonindex1 == sonindex) {
                        sonflag = -1;
                        continue;
                    }
                    sonnum[i] = Integer.parseInt(son.substring(sonindex, sonindex1));
                    sonindex = sonindex1 + 1;
                }
                // System.out.println(sonnum[i]);
            }

            // System.out.println(ipflag + " " + sonflag);

            // if(ipnum[0] == 0 || ipnum[0] == 127) continue;
            if (sonnum[0] == 255) {
                if (sonnum[1] == 255) {
                    if (sonnum[2] == 255) {
                        if (sonnum[3] == 255) {
                            sonflag = -1;
                        } else if (sonnum[3] == 0 || sonnum[3] == 128 || sonnum[3] == 192 ||sonnum[3] == 224
                                   || sonnum[3] == 240 || sonnum[3] == 248 || sonnum[3] == 252 ||sonnum[3] == 254) {
                        } else {
                            sonflag = -1;
                        }
                    } else if (sonnum[2] == 0 || sonnum[2] == 128 || sonnum[2] == 192 ||sonnum[2] == 224
                               || sonnum[2] == 240 || sonnum[2] == 248 || sonnum[2] == 252 ||sonnum[2] == 254) {
                        if (sonnum[3] != 0) sonflag = -1;
                    } else sonflag = -1;
                } else if (sonnum[1] == 0 || sonnum[1] == 128 || sonnum[1] == 192 ||sonnum[1] == 224
                           || sonnum[1] == 240 || sonnum[1] == 248 || sonnum[1] == 252 ||sonnum[1] == 254) {
                    if (sonnum[2] != 0 || sonnum[3] != 0) sonflag = -1;
                } else sonflag = -1;
            } else if (sonnum[0] == 128 || sonnum[0] == 192 ||sonnum[0] == 224
                       || sonnum[0] == 240 || sonnum[0] == 248 || sonnum[0] == 252 ||sonnum[0] == 254) {
                if(sonnum[1]!=0 || sonnum[2]!=0 || sonnum[3]!=0){
                    sonflag = -1;
                }        
            }else sonflag = -1;

            if (ipflag == -1 || sonflag == -1) {
                wr = wr + 1;
                continue;
            }

            if(1 <= ipnum[0] && ipnum[0] <= 127){
                A++;
                if(ipnum[0] == 10) pr++;
            }else if(128 <= ipnum[0] && ipnum[0] <= 191){
                B++;
                if(ipnum[0] == 172 && ipnum[1] >= 16 && ipnum[1] <= 31) pr++;
            }else if(192 <= ipnum[0] && ipnum[0] <= 223){
                C++;
                if(ipnum[0] == 192 && ipnum[1] == 168) pr++;
            }else if(224 <= ipnum[0] && ipnum[0] <= 239){
                D++;
            }else if(240 <= ipnum[0] && ipnum[0] <= 255){
                E++;
            }


        }
        System.out.print(A + " " + B + " " + C + " " + D + " " + E + " " + wr + " " + pr);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务