模拟题 I

来源:互联网 发布:java 静态单例模式 编辑:程序博客网 时间:2024/06/10 06:26



题意:

给出m个ip地址

求救网络地址和掩码

网络地址:一个ip地址用4个8位来表示,即32位,找m个ip地址中,ip地址相应位相同那么网络地址就是ip地址相应位,否则就是0

掩码:同理,只是若ip地址相应位都相同,那么掩码相应位是 1  否则是 0

求解这两个数据即可

题解:

模拟

注意初始化问题


#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[50],b[50];char str[50];int main(){    int n,m;    freopen("ip.in","r",stdin);    freopen("ip.out","w",stdout);    //freopen("in.txt","r",stdin);    while(scanf("%d",&m)!=EOF)    {        n=33;        memset(b,0,sizeof(b));        for(int k=1;k<=m;k++)        {            memset(a,0,sizeof(a));            int num=0,flag=1,p;            scanf("%s",str);            int len=strlen(str);            for(int i=0;i<=len;i++){                if(str[i]<='9'&&str[i]>='0')                    num=num*10+str[i]-'0';                else{                    p=flag*8;                    flag++;                    while(num)                    {                        a[p--]=num%2;                        num/=2;                    }                    num=0;                }            }            if(k==1){                for(int i=1;i<=32;i++)                    b[i]=a[i];                continue;            }            for(int i=1;i<=32;i++){                if(b[i]!=a[i]){                    n=min(n,i);                    break;                }            }        }        int t1[5],t2[5];        memset(t1,0,sizeof(t1));        memset(t2,0,sizeof(t2));        for(int i=1;i<=8;i++){            if(i<n){                t1[0]=t1[0]*2+a[i];                t2[0]=t2[0]*2+1;            }            else{                t1[0]=t1[0]*2;                t2[0]=t2[0]*2;            }        }        //______________________________________//        for(int i=9;i<=16;i++){            if(i<n){                t1[1]=t1[1]*2+a[i];                t2[1]=t2[1]*2+1;            }            else{                t1[1]=t1[1]*2;                t2[1]=t2[1]*2;            }        }        //______________________________________//        for(int i=17;i<=24;i++){            if(i<n){                t1[2]=t1[2]*2+a[i];                t2[2]=t2[2]*2+1;            }            else{                t1[2]=t1[2]*2;                t2[2]=t2[2]*2;            }        }        //______________________________________//        for(int i=25;i<=32;i++){            if(i<n){                t1[3]=t1[3]*2+a[i];                t2[3]=t2[3]*2+1;            }            else{                t1[3]=t1[3]*2;                t2[3]=t2[3]*2;            }        }        for(int i=0;i<4;i++)            printf("%d%c",t1[i],i!=3?'.':'\n');        for(int i=0;i<4;i++)            printf("%d%c",t2[i],i!=3?'.':'\n');    }    return 0;}


原创粉丝点击