zoukankan      html  css  js  c++  java
  • poj 2799 IP Networks (模拟/水题)

    题目:给你一堆ip,求他们的最小网络地址和网络掩码

    思路:找到最大的ip和最小的ip,把他们转化成二进制,从头到尾找二进制位相同的个数,最小网络地址把后面的不同的所有二进制变成0,网络掩码把前面的相同变成一

    代码:

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    
    struct node
    {
        char k[35];
    } data[1005];
    
    bool cmp(node a,node b)
    {
        if(strcmp(a.k,b.k)<0) return true;
        else return false;
    }
    
    void cut(char *str,int num)
    {
        int ans=0;
        int q=8;
        int flag=1;
        for(int i=0; i<strlen(str); i++)
        {
            if(str[i]!='.')
            {
                ans=ans*10+str[i]-'0';
            }
            else
            {
                flag++;
                while(ans)
                {
                    data[num].k[q]=ans%2+'0';
                    ans=ans/2;
                    q--;
                }
                q=8*flag;
                ans=0;
            }
        }
        while(ans)
        {
            data[num].k[q]=ans%2+'0';
            ans=ans/2;
            q--;
        }
        data[num].k[33]='';
    }
    
    int main()
    {
        int m;
        char k[35];
        freopen("ip.in","r",stdin);
        freopen("ip.out","w",stdout);
        while(cin>>m)
        {
            for(int i=0; i<m; i++)
            {
                cin>>k;
                memset(data[i].k,'0',sizeof(data[i].k));
                cut(k,i);
                //cout<<data[i].k<<endl;
            }
            sort(data,data+m,cmp);
            int n=0;
            /*for(int i=0;i<m;i++)
            {
                cout<<data[i].k<<endl;
            }*/
            for(int i=1; i<=32; i++)
            {
                if(data[0].k[i]==data[m-1].k[i])
                {
                    n++;
                }
                else break;
            }
            for(int i=n+1;i<=32;i++)
            {
                data[m-1].k[i]='0';
            }
            //cout<<data[m-1].k<<endl;
            int up=128;
            int ans=0;
            for(int i=1;i<=32;i++)
            {
                ans=ans+up*(data[m-1].k[i]-'0');
                up=up/2;
                if(up==0)
                {
                    cout<<ans;
                    if(i!=32)
                    cout<<'.';
                    up=128;
                    ans=0;
                }
            }
            cout<<endl;
            for(int i=1;i<=n;i++)
            {
                data[m-1].k[i]='1';
            }
            ans=0;
            for(int i=1;i<=32;i++)
            {
                ans=ans+up*(data[m-1].k[i]-'0');
                up=up/2;
                if(up==0)
                {
                    cout<<ans;
                    if(i!=32)
                    cout<<'.';
                    up=128;
                    ans=0;
                }
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    ‘Host’ is not allowed to connect to this mysql server
    centos7安装mysql
    further configuration avilable 不见了
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    hadoop启动 datanode的live node为0
    ssh远程访问失败 Centos7
    Linux 下的各种环境安装
    Centos7 安装 python2.7
    安装scala
    Centos7 安装 jdk 1.8
  • 原文地址:https://www.cnblogs.com/simplekinght/p/6710659.html
Copyright © 2011-2022 走看看