首页 > 其他分享 >HJ18 识别有效的IP地址和掩码并进行分类统计

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

时间:2024-09-01 20:28:14浏览次数:3  
标签:sz cnt 题意 int HJ18 num && IP地址 掩码

题意…真的…好多…让人误会的地方T_T

最大的教训就是,处理略微复杂以上的题目,一定要拆分成很多个子程序来写,不要一大堆东西扔在主程序里硬写,很容易出错还难调试。

哦,第二个教训就是一定要自己手算一下样例,搞明白题意再写题!!!不要看着题面觉得很容易就自己YY!!T_T

题目没什么好说的,思路就是对于每一个字符串,把里面的数字都拆出来。如果不等于8,就证明IP地址不是4个数或者子网掩码不是4个数,直接跳出。

然后判断一下数字范围是否在0~255.

最后就是按照题意要求进行分类什么的……细节很多,题面写得很容易让人误会,要注意。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char s[500];
 4 int l,cnt_num=0,sz[10],CW=0,A=0,B=0,C=0,D=0,E=0,syIP=0;
 5 int st;
 6 int IntoNum(int i){
 7     int x=0,f=1;
 8     while(s[i]<'0'||s[i]>'9'){
 9         if(s[i]=='-') f=-1;
10         i++;
11     }
12     while(s[i]>='0'&&s[i]<='9'){
13         x=x*10+s[i]-'0';
14         i++;
15     }
16     return f*x;
17 }
18 void CheckIPtype(){
19     if(sz[1]>=1&&sz[1]<=126)A++;
20     if(sz[1]>=128&&sz[1]<=191)B++;
21     if(sz[1]>=192&&sz[1]<=223)C++;
22     if(sz[1]>=224&&sz[1]<=239)D++;
23     if(sz[1]>=240&&sz[1]<=255)E++;
24     if(sz[1]==10)syIP++;
25     if(sz[1]==172&&(sz[2]>=16&&sz[2]<=31))syIP++;
26     if(sz[1]==192&&sz[2]==168)syIP++;
27     return;
28 }
29 /*void init(){
30 //    memset(sz,0,sizeof(sz));
31     cnt_num=0;
32      st=-1;
33     return;
34 }*/
35 bool CheckYM(){
36     int a[33],cnt=0,x;
37 //    memset(a,0,sizeof(a));
38     for(int i=5;i<=8;i++){
39         x=1<<7;
40         for(int j=1;j<=8;j++){
41             cnt++;
42             if(sz[i]&x) a[cnt]=1; else a[cnt]=0;
43             x>>=1;
44         }
45     }
46 //    for(int i=1;i<=32;i++) printf("%d ",a[i]);puts("");
47     if(a[1]==0)return 0;
48     for(int i=2;i<=32;i++)
49         if(a[i]==1&&a[i-1]==0) return 0;
50     if(a[32]==1)return 0;
51     return 1;
52 }
53 bool CheckIP(){
54     for(int i=1;i<=8;i++)
55         if(sz[i]<0||sz[i]>255) return 0;
56     return 1;
57 }
58 int main(){
59     while(~scanf("%s",s)){
60         cnt_num=0;
61         l=strlen(s);
62         for(int i=0;i<l;i++){
63             if(s[i]>='0'&&s[i]<='9'){
64                 if(i==0||(s[i-1]<'0'||s[i-1]>'9'))
65                 sz[++cnt_num]=IntoNum(i);
66             }
67         }
68 //        if(cnt_num==8)printf("CHECK YM:%d\n",CheckYM());
69         if(sz[1]==0||sz[1]==127)continue;
70         if(cnt_num!=8 || !CheckIP() || !CheckYM()){
71             CW++;
72             continue;
73         }
74         CheckIPtype();
75 //        if(cnt_num!=8)printf("NO!%d\n",cnt_num);
76     }
77     printf("%d %d %d %d %d %d %d",A,B,C,D,E,CW,syIP);
78     return 0;
79 }

 

标签:sz,cnt,题意,int,HJ18,num,&&,IP地址,掩码
From: https://www.cnblogs.com/AlenaNuna/p/18391660

相关文章

  • 华为笔试——整数与IP地址间的转换
    描述原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。举例:一个ip地址为10.0.3.193每段数字             相对应的二进制数10                   000010100     ......
  • k8s中pod获取宿主机IP地址
    在Pod内部的Java环境中,你可以通过KubernetesAPI或KubernetesDownwardAPI来获取节点的IP地址。以下是几种方法来实现这一点:个人使用的第一种方法1:使用KubernetesDownwardAPI如果你已经在Pod配置中使用了DownwardAPI,将节点的IP地址注入到环境变量中,你可......
  • 【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允
    问题描述对Azure上的虚拟机资源,需要进行安全管理。只有指定的IP地址才能够通过RDP/SSH远程到虚拟机上,有如下几点考虑:1)使用AzurePolicy服务,扫描订阅中全部的网络安全组(NSG:NetworkSecurityGroup)资源2)判断入站规则,判断是否是3389,22端口3)判断源地址是否是被允许的I......
  • 【Azure Policy】使用策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允
    问题描述对Azure上的虚拟机资源,需要进行安全管理。只有指定的IP地址才能够通过RDP/SSH远程到虚拟机上,有如下几点考虑:1)使用AzurePolicy服务,扫描订阅中全部的网络安全组(NSG:NetworkSecurityGroup)资源2)判断入站规则,判断是否是3389,22端口3)判断源地址是否是被允许的IP4)对......
  • 【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允
    问题描述对Azure上的虚拟机资源,需要进行安全管理。只有指定的IP地址才能够通过RDP/SSH远程到虚拟机上,有如下几点考虑:1)使用AzurePolicy服务,扫描订阅中全部的网络安全组(NSG:NetworkSecurityGroup)资源2)判断入站规则,判断是否是3389,22端口3)判断源地址是否是被允许的I......
  • 【Shell脚本】判断用户输入的是否为IP地址
    方法1:#!/bin/bashfunctioncheck_ip(){IP=$1VALID_CHECK=$(echo$IP|awk-F.'$1<=255&&$2<=255&&$3<=255&&$4<=255{print"yes"}')ifecho$IP|grep-E"^[0-9]{1,3}\.[0-9]{1,3}\......
  • IP地址库:从收集到处理
    准确的IP地址库对于网络管理、安全防护、地理定位等众多领域都十分重要。然而,原始的IP地址数据往往存在着各种问题,如不完整、不准确、重复等,因此,对IP地址库数据进行有效的收集、清洗和处理是每个IP收集整理的关键且不可或缺的步骤。IP地址库数据收集(一)网络流量监测通过在网......
  • IP地址的五大分类及回环地址
    你好,我是沐爸,欢迎点赞、收藏和关注。个人知乎IP地址根据网络号的不同可以分为五大类,即A类、B类、C类、D类和E类。以下是这五大类IP地址的详细介绍:1.A类地址地址范围:1.0.0.1~126.255.255.254特点:第1个字节为网络地址,其他3个字节为主机地址。网络地址的最高位始终是0......
  • 【Linux】IP地址和MAC地址
    一、MAC地址MAC地址是用来识别数据链路层中相连的节点。它的长度为48位比特位,也就是6字节。MAC地址是具有唯一性的,它的唯一性是在网卡硬件生产时就已经制定,所以一个网卡一个MAC地址。这就意味着,一台主机如果有多个网卡,那么就有多个MAC地址。二、IP地址IP协议有两个版本......
  • IP地址详解
    IP地址每个连接在因特网上的主机(或路由器)分配一个在全世界范围内是唯一的32位的标识符。 分类IP地址IP地址=网络号+主机号IP地址的使用范围网络类别最大网络数第一个可用的网络号最后一个可用的网络号每个网络中最大的主机数A27-211262......