题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
#include <stdio.h> //判断掩码是否合法的函数 int zm(int b1,int b2,int b3,int b4){ if(b1!=255){ if((b1==128||b1==192||b1==224||b1==240||b1==248||b1==252||b1==254)&&b2==0&&b3==0&&b4==0) return 1; else return 0; } else{ if(b2!=255){ if((b2==0||b2==128||b2==192||b2==224||b2==240||b2==248||b2==252||b2==254)&&b3==0&&b4==0) return 1; else return 0; } else{ if(b3!=255){ if((b3==0||b3==128||b3==192||b3==224||b3==240||b3==248||b3==252||b3==254)&&b4==0) return 1; else return 0; } else{ if(b4==0||b4==128||b4==192||b4==224||b4==240||b4==248||b4==252||b4==254) return 1; else return 0; } } } } //判断ip是否合法的函数 int ifok(int a1,int a2,int a3,int a4,int b1,int b2,int b3,int b4){ if(a1<0||a1>255||a2<0||a3<0||a4<0||a2>255||a3>255||a4>255) return 0; else if(a1==0||a1==127) return 2; else{ if(zm(b1,b2,b3,b4)) return 1; else return 0; } } int main() { int Anum=0,Bnum=0,Cnum=0,Dnum=0,Enum=0,Fnum=0,Snum=0; int a1,a2,a3,a4,b1,b2,b3,b4; int t; while (scanf("%d.%d.%d.%d~%d.%d.%d.%d",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4) != EOF) { t=ifok(a1, a2, a3, a4, b1, b2, b3, b4); if(t==0) Fnum++; else if(t==1){ if(a1>0&&a1<127) Anum++; if(a1>127&&a1<192) Bnum++; if(a1>191&&a1<224) Cnum++; if(a1>223&&a1<240) Dnum++; if(a1>239&&a1<256) Enum++; if(a1==10||(a1==172&&a2>15&&a2<32)||(a1==192&&a2==168)) Snum++; } } printf("%d %d %d %d %d %d %d",Anum,Bnum,Cnum,Dnum,Enum,Fnum,Snum); return 0; }