首页 > 试题广场 >

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

[编程题]识别有效的IP地址和掩码并进行分类统计
  • 热度指数:329088 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

请解析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.0239.255.255.255;

E类地址从240.0.0.0255.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就是一个非法的掩码)
(注意二进制下全是1或者全是0均为非法子网掩码)

注意:
1. 类似于【0.*.*.*】和【127.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时请忽略
2. 私有IP地址和A,B,C,D,E类地址是不冲突的



输入描述:

多行字符串。每行一个IP地址和掩码,用~隔开。

请参考帖子https://www.nowcoder.com/discuss/276处理循环输入的问题。


输出描述:

统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。

示例1

输入

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

说明

10.70.44.68~255.254.255.0的子网掩码非法,19..0.~255.255.255.0的IP地址非法,所以错误IP地址或错误掩码的计数为2;
1.0.0.1~255.0.0.0是无误的A类地址;
192.168.0.2~255.255.255.0是无误的C类地址且是私有IP;
所以最终的结果为1 0 1 0 0 2 1        
示例2

输入

0.201.56.50~255.255.111.255
127.201.56.50~255.255.111.255

输出

0 0 0 0 0 0 0

说明

类似于【0.*.*.*】和【127.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时请忽略         
头像 milomusiala
发表于 2020-06-16 08:42:04
题目要点: 所有的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 展开全文
头像 f(x)=n^2
发表于 2021-09-29 01:01:01
ipClass2num = { 'A':0, 'B':0, 'C':0, 'D':0, 'E':0, 'ERROR':0, 'PRIVATE':0, } # 私有IP地址和A,B,C,D,E类地址是不冲突的,也就是说需要同时+1 def che 展开全文
头像 牛客875694424号
发表于 2021-11-07 12:22:28
结合前面几位大佬的题解,整出一个Java版.这里有个大坑,若是ip是0或者127开头的直接忽略,即使子网掩码是非法的,也不能将此算到error里去。 具体实现 查看ip第一段是否为“0”或“127”,若是忽略; 判断子网掩码是否合法,如果满足下列条件之一即为非法掩码 数字段数不为4 在二进制下 展开全文
头像 不会做题的小菜鸡
发表于 2021-11-02 20:13:26
题目分析 题目给出了若干个IP地址和子网掩码的字符串 我们要根据给出的信息对这些IP和掩码进行划分工作,统计类型 一共要划分和统计的类型有7种,分别是A、B、C、D、E类IP地址的数量,错误IP或错误掩码的数量、私有IP的数量 这是一个处理字符串的问题,思路其实比较简单,一点点抠细节处理清 展开全文
头像 一只熊熊
发表于 2020-11-17 19:14:05
子网掩码转换为二进制后,前面x位都为1,后面x为都为0。通常的子网掩码校验方法基本都是循环校验,实现比较复杂。今天向大家介绍一个简单的校验子网掩码的方法。假设子网掩码其中一段为mask=111100001.对子网掩码取反(或者与0xFFFFFFFF异或),取反后子网掩码为000011112.取反后的 展开全文
头像 摸鱼学大师
发表于 2021-10-10 17:04:01
题目的主要信息: 给出多行字符串,每行都是"IP地址~掩码"的形式,统计A类地址、B类地址、C类地址、D类地址、E类地址、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开 IP地址类型如下: A类地址1.0.0.0~126.255.255.255; B类地址128.0.0.0~191. 展开全文
头像 刷城
发表于 2020-03-30 18:15:53
平时就没咋练习这些题,对ip啊,子网掩码就知道个ip协议4中配置,看到华为的这道题,说实话,题都没咋看懂。不过搞了3天后,终于搞清楚了,下面分享一些我的思路和遇到的一些坑 坑一 统计错误IP地址或错误掩码的数目 一开始我想的是,统计每一个错误的ip地址和错误掩码,举个例子,0.0.10.1~255. 展开全文
头像 陶陶2021
发表于 2021-09-28 22:40:07
1、如果是0...* 或 127...* 跳过2、如果掩码错误,直接错误+1,扫描下一个3、如果掩码正确,判断ip,如果ip错误,错误+14、如果ip正确,判断ip类型5、如果是A类型, A++ 如果是私人ip,privateIp++如果是B类型, B++ 如果是私人ip,privateIp++如 展开全文
头像 Yvette_ZYH
发表于 2020-08-26 20:52:56
python3 解法供参考 def checkvalid(ip, ym): # 若ip错误,则掩码无需判断 ip1 = filter(None, ip.split('.')) ip2 = [int(x) for x in ip1] if len(ip2) < 4 展开全文
头像 Python_zhang
发表于 2022-01-08 23:01:27
#include <stdio.h> #include <string.h> #include <stdlib.h> // 多行注释 ctrl+/ /*char *token token = strtok(str, "分割符"); while( token 展开全文

问题信息

难度:
735条回答 90977浏览

热门推荐

通过挑战的用户

查看代码