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;
    }
  • 相关阅读:
    PHP学习之路(六)
    PHP学习之路(五)
    PHP学习之路(四)
    PHP学习之路(三)
    PHP学习之路(二)
    PHP学习之路(一)
    webstrom运行出现404的解决办法
    适配移动端Swiper的3D旋转木马轮播~
    为什么觉得英文字体设计比中文字体设计来的好看?
    linux 部署系统通过SecureCRT启动tomcat 控制台中文乱码
  • 原文地址:https://www.cnblogs.com/simplekinght/p/6710659.html
Copyright © 2011-2022 走看看