zoukankan      html  css  js  c++  java
  • 子网掩码

    子网掩码

    时间限制: 1 Sec 内存限制: 32 MB


    题目描述

    子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
    最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。

    请看以下示例:

    运算演示之一:
    IP地址  192.168.0.1
    子网掩码  255.255.255.0

    转化为二进制进行运算:
    IP地址  11010000.10101000.00000000.00000001
    子网掩码 11111111.11111111.11111111.00000000

    AND运算:
         11010000.10101000.00000000.00000000

    转化为十进制后为:
          192.168.0.0

    运算演示之二:
    IP地址  192.168.0.254
    子网掩码  255.255.255.0

    转化为二进制进行运算:
    IP地址  11010000.10101000.00000000.11111110
    子网掩码 11111111.11111111.11111111.00000000

    AND运算:
         11010000.10101000.00000000.00000000

    转化为十进制后为:
          192.168.0.0

    运算演示之三:
    IP地址  192.168.0.4
    子网掩码  255.255.255.0

    转化为二进制进行运算:
    IP地址  11010000.10101000.00000000.00000100
    子网掩码 11111111.11111111.11111111.00000000

    AND运算:
         11010000.10101000.00000000.00000000

    转化为十进制后为:
          192.168.0.0

    通过以上对三组计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的,均为192.168.0.0,所以计算机就会把这三台计算机视为在同一子网络。

    输入

    输入的第一行是本机IP地址;
    第二行是子网掩码;
    第三行是一个整数N,表示后面有N个IP地址;
    接下来N行:
    第1个IP地址


    第N个IP地址

    输出

    计算并输出N个IP地址是否与本机在同一子网内。对于在同一子网的输出“INNER”,对于在不同子网的输出“OUTER”。

    样例输入

    192.168.0.1
    255.255.255.0
    3
    192.168.0.2
    192.168.0.254
    192.168.1.2

    样例输出

    INNER
    INNER
    OUTER

    题意概括

    给出一个计算机的ip地址,和子网掩码,在给出n个ip问之后给的ip地址和之前给出的ip地址是不是在一个网络中。

    解题思路

    我当时计算的时候是根据题中给出的定义,计算成二进制之后一位一位的进行计算的,虽然当时考虑到了使用&这个运算符,当时为了保证正确率还是转化为二进制判断之后再转化回来进行判断的、

    代码如下

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    
    int aa[4];
    int ff(int a,int b)
    {
        int ch1[10]={0};
        int ch2[10]={0};
        int i;
        for(i=0;i<9;i++){
            ch1[i]=a%2;
            a/=2;
        }
        for(i=0;i<9;i++){
            ch2[i]=b%2;
            b/=2;
        }
        int sum=0;
    
        for(i=8;i>=0;i--){
            if(ch1[i]==1&&ch2[i]==1){
                sum=sum*2+1;
            }
            else sum=sum*2;
        }
        return sum;
    }
    int main ()
    {
        int a[4];
        int b[4];
        int n,m,i,j;
        while(~scanf(" %d%*c%d%*c%d%*c%d",&aa[0],&aa[1],&aa[2],&aa[3])){
            scanf("%d%*c%d%*c%d%*c%d",&a[0],&a[1],&a[2],&a[3]);
            for(i=0;i<4;i++){
                aa[i]=ff(aa[i],a[i]);
            }
            scanf("%d",&n);
            while(n--){
                scanf("%d%*c%d%*c%d%*c%d",&b[0],&b[1],&b[2],&b[3]);
                int y=1;
                for(i=0;i<4;i++){
                    if(aa[i]!=ff(a[i],b[i])){
                        y=0;
                    }
                }
                if(y==1){
                    printf("INNER
    ");
                }else printf("OUTER
    ");
            }
        }
        return 0;
    }
    
  • 相关阅读:
    Redis之使用python脚本监控队列长度
    ELK之filebate收集日志传递至Logstash
    [转] SOLID五大设计原则
    [转] 面向对象原则之GOF是招式,九大原则才是精髓
    [转] (CQRS)命令和查询责任分离架构模式(一) 之 什么是CQRS
    [0] 四色原型
    [0] C#软件项目版本号的命名规则及格式介绍
    [0] AssemblyInfo.cs文件介绍
    [0] 服务器 TCP 提供程序无法在 [ 'any' <ipv4> *] 上侦听。TCP 端口已在使用中。
    [0] C#异常种类
  • 原文地址:https://www.cnblogs.com/lanaiwanqi/p/10445731.html
Copyright © 2011-2022 走看看