首页 > 试题广场 >

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

[编程题]识别有效的IP地址和掩码并进行分类统计
  • 热度指数:368890 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}在本题中,我们需要处理地址信息,其由 \sf{IP} 地址和子网掩码组成,这两者均形如 \texttt{ ,由四段数字组成,每段数字之间以点分隔。

\hspace{15pt}我们定义五类 \sf{IP} 地址:
\hspace{23pt}\bullet\,A类:\texttt{
\hspace{23pt}\bullet\,B类:\texttt{
\hspace{23pt}\bullet\,C类:\texttt{
\hspace{23pt}\bullet\,D类:\texttt{
\hspace{23pt}\bullet\,E类:\texttt{

\hspace{15pt}我们定义私有 \sf{IP} 地址:
\hspace{23pt}\bullet\,\texttt{
\hspace{23pt}\bullet\,\texttt{
\hspace{23pt}\bullet\,\texttt{

\hspace{15pt}我们定义合法的子网掩码:
\hspace{23pt}\bullet\,\sf{IP} 地址转换为二进制后,必须由若干个连续的 1 后跟若干个连续的 0 组成;
\hspace{23pt}\bullet\,例如,\texttt{ 是一个非法的子网掩码,因为它转换为二进制后为 \texttt{1.1.1.101} ,中间出现了 0 后又出现了 1
\hspace{23pt}\bullet\,注意,全为 1 或全为 0 的子网掩码也是非法的。

\hspace{15pt}现在,你需要分类统计ABCDE类地址的数量、错误 \textsf{IP} 或错误子网掩码的数量、私有 \textsf{IP} 的数量。

\hspace{15pt}特别地,我们还有以下提示:
\hspace{23pt}\bullet\,类似于 \texttt{\texttt{\sf{IP} 地址不属于上述输入的任意一类,也不属于不合法 \sf{IP} 地址;
\hspace{23pt}\bullet\,一个 \sf{IP} 地址既可以是私有 \sf{IP} 地址,也可以是五类 \sf{IP} 地址之一,计数时请分别计入。

输入描述:
\hspace{15pt}本题将会给出 1 \leqq T \leqq 1000 条地址信息,确切数字未知,您需要一直读入直到文件结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每条地址信息描述如下:

\hspace{15pt}在一行上先输入一个字符串,代表 \sf{IP} 地址;随后,在同一行输入一个字符串,代表子网掩码;使用 \texttt{ 分隔。


输出描述:
\hspace{15pt}在一行上输出七个整数,分别代表ABCDE类地址的数量、错误 \textsf{IP} 或错误子网掩码的数量、私有 \textsf{IP} 的数量。
示例1

输入

10.70.44.68~1.1.1.5
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

说明

\hspace{15pt}对于第一条地址信息,\texttt{ 是其 \sf{IP} 地址,\texttt{ 是其子网掩码;该条地址的子网掩码非法。
\hspace{15pt}对于第二条地址信息,\sf{IP} 地址和子网掩码均无误,且属于A类地址。
\hspace{15pt}对于第三条地址信息,\sf{IP} 地址和子网掩码均无误,且属于C类地址,同时属于私有 \sf{IP} 地址。
\hspace{15pt}对于第四条地址信息,\sf{IP} 地址非法。
示例2

输入

0.201.56.50~255.255.255.0
127.201.56.50~255.255.111.255

输出

0 0 0 0 0 0 0

说明

\hspace{15pt}对于第一、二条地址信息,均属于上方提示中提到的特殊 \sf{IP} 地址,不需要处理,直接跳过。
\hspace{15pt}特别地,第二条地址的子网掩码是非法的。但是因为该条为特殊 \sf{IP} 地址,此优先级更高,所以不进入统计。

这道题你会答吗?花几分钟告诉大家答案吧!