华为OJ——识别有效的IP地址和掩码并进行分类统计
来源:互联网 发布:网站建设优化及推广 编辑:程序博客网 时间:2024/05/13 05:20
题目描述
请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。
所有的IP地址划分为 A,B,C,D,E五类
A类地址1.0.0.0~126.255.255.255;
B类地址128.0.0.0~191.255.255.255;
C类地址192.0.0.0~223.255.255.255;
D类地址224.0.0.0~239.255.255.255;
E类地址240.0.0.0~255.255.255.255
私网IP范围是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
子网掩码为前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
本题暂时默认以0开头的IP地址是合法的,比如0.1.1.2,是合法地址
输入描述:
多行字符串。每行一个IP地址和掩码,用~隔开。
输出描述:
统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。
输入例子:
10.70.44.68~255.254.255.0
1.0.0.1~255.0.0.0
192.168.0.2~255.255.255.0
19..0.~255.255.255.0
输出例子:
1 0 1 0 0 2 1
代码
package cn.c_shuang.demo19;import java.util.Scanner;/** * 识别有效的IP地址和掩码并进行分类统计 * @author Cshuang * */public class Main { public static int[]num=new int[7]; public static void main(String[] args) { Scanner in =new Scanner(System.in); while(in.hasNext()){ String ipMask=in.nextLine(); count(ipMask); } for (int i = 0; i < 7; i++) { if(i!=6){ System.out.print(num[i]+" "); }else System.out.print(num[i]); } in.close(); } public static void count(String ipMask) { for (int n = 0; n < 1; n++) {//之所以加一个看似没意义的循环,主要目的是方便,后面的break; String[] str=ipMask.split("~"); String[]ip=str[0].split("\\.");//正则表达式\\表示\,而.需要转义\. String[]mask=str[1].split("\\."); if(ip.length<4||mask.length<4){ num[5]++; break; } for (int k = 0; k < 4; k++) { if("".equals(ip[k])||"".equals(mask[k]) ||" ".equals(ip[k])||" ".equals(mask[k])){ num[5]++; break; } } int[] ipInt=new int[4]; int[] maskInt=new int[4]; Long maskLong=0l; for (int i = 0; i < 4; i++) { ipInt[i]=Integer.parseInt(ip[i]); maskInt[i]=Integer.parseInt(mask[i]); if(ipInt[i]<0 || ipInt[i]>255 || maskInt[i]<0 || maskInt[i]>255){ num[5]++;//只需要计一次 break; } } if (maskInt[0] == 255 && maskInt[1] == 255 && maskInt[2] == 255 && maskInt[3] == 255) { num[5]++; break; } maskLong=(long) (maskInt[0]*(0xffffff+1)+maskInt[1]*(0xffff+1)+maskInt[2]*(0xff+1)+maskInt[3]);//将掩码的数组转换为16进制 if((maskLong|(maskLong-1))!=0xffffffff){//判断掩码判断 num[5]++;// break; } if(ipInt[0]==10 ||(ipInt[0]==172&&ipInt[1]>=16&&ipInt[1]<=31) ||(ipInt[0]==192&&ipInt[1]==168)){ num[6]++; //break;不能break,因为它和num[0有重合部分] } if(ipInt[0]>=1&&ipInt[0]<=126){ num[0]++; break; }else if(ipInt[0]>=128&&ipInt[0]<=191){ num[1]++; break; }else if(ipInt[0]>=192&&ipInt[0]<=223){ num[2]++; break; }else if(ipInt[0]>=224&&ipInt[0]<=239){ num[3]++; break; }else if(ipInt[0]>=240){ num[4]++; break; } } }}
阅读全文
0 0
- 华为OJ——识别有效的IP地址和掩码并进行分类统计
- 华为OJ(识别有效的IP地址和掩码并进行分类统计)
- 华为OJ中级题-识别有效的IP地址和掩码并进行分类统计
- 【华为OJ】【018-识别有效的IP地址和掩码并进行分类统计】
- 华为oj 识别有效的IP地址和掩码并进行分类统计
- 华为Oj--识别有效的IP地址和掩码并进行分类统计
- 华为oj中级 识别有效的IP地址和掩码并进行分类统计
- 华为机试——识别有效的IP地址和掩码并进行分类统计
- 华为机试——识别有效的IP地址和掩码并进行分类统计
- 华为机试题——识别有效的IP地址和掩码并进行分类统计
- [华为机试练习题]34.识别有效的IP地址和掩码并进行分类统计
- 【华为OJ18】识别有效的IP地址和掩码并进行分类统计
- 华为机试---识别有效的IP地址和掩码并进行分类统计
- OJ中----识别有效的IP地址和掩码并进行分类统计
- 编程题——识别有效的IP地址和掩码并进行分类统计
- 华为OJ训练之0033-170111-识别有效的IP地址和掩码并进行分
- 识别有效的IP地址和掩码并进行分类
- 识别有效的IP地址和掩码并进行分类统计
- 用pscp.exe 实现windows 与 linux 之间传递文件
- JavaScript本地对象常用方法(二)——字符串对象
- C语言 学生成绩管理系统
- 写给大忙人看的Java核心技术-Solutions提供
- CF818A-Diplomas and Certificates
- 华为OJ——识别有效的IP地址和掩码并进行分类统计
- CF818B-Permutation Game
- 这是数组升序的排序的案例
- ipython
- 利用CSS进行各种图形的绘制
- XXE漏洞笔记
- 郑州-大连:骑行在路上
- Java注解简介
- jsPDF的避坑教程