题解 | 识别有效的IP地址和掩码并进行分类统计
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int A = 0;
int B = 0;
int C = 0;
int D = 0;
int E = 0;
int wr = 0;
int pr = 0;
while (in.hasNextLine()) { // 注意 while 处理多个 case
String a = in.nextLine();
int index = a.indexOf('~');
String ip = a.substring(0, index);
String son = a.substring(index + 1);
int ipindex = 0;
int sonindex = 0;
int[] ipnum = new int[4];
int[] sonnum = new int[4];
int ipflag = 0;
int sonflag = 0;
for (int i = 0; i < 4; i++) {
if (ipflag == -1) {
continue;
}
if (i == 3) {
ipnum[i] = Integer.parseInt(ip.substring(ipindex));
} else {
int ipindex1 = ip.indexOf('.', ipindex);
if (ipindex1 == ipindex) {
ipflag = -1;
continue;
}
ipnum[i] = Integer.parseInt(ip.substring(ipindex, ipindex1));
ipindex = ipindex1 + 1;
}
// System.out.println(ipnum[i]);
}
if (ipnum[0] == 0 || ipnum[0] == 127) continue;
for (int i = 0; i < 4; i++) {
if (sonflag == -1) {
continue;
}
if (i == 3) {
sonnum[i] = Integer.parseInt(son.substring(sonindex));
} else {
int sonindex1 = son.indexOf('.', sonindex);
if (sonindex1 == sonindex) {
sonflag = -1;
continue;
}
sonnum[i] = Integer.parseInt(son.substring(sonindex, sonindex1));
sonindex = sonindex1 + 1;
}
// System.out.println(sonnum[i]);
}
// System.out.println(ipflag + " " + sonflag);
// if(ipnum[0] == 0 || ipnum[0] == 127) continue;
if (sonnum[0] == 255) {
if (sonnum[1] == 255) {
if (sonnum[2] == 255) {
if (sonnum[3] == 255) {
sonflag = -1;
} else if (sonnum[3] == 0 || sonnum[3] == 128 || sonnum[3] == 192 ||sonnum[3] == 224
|| sonnum[3] == 240 || sonnum[3] == 248 || sonnum[3] == 252 ||sonnum[3] == 254) {
} else {
sonflag = -1;
}
} else if (sonnum[2] == 0 || sonnum[2] == 128 || sonnum[2] == 192 ||sonnum[2] == 224
|| sonnum[2] == 240 || sonnum[2] == 248 || sonnum[2] == 252 ||sonnum[2] == 254) {
if (sonnum[3] != 0) sonflag = -1;
} else sonflag = -1;
} else if (sonnum[1] == 0 || sonnum[1] == 128 || sonnum[1] == 192 ||sonnum[1] == 224
|| sonnum[1] == 240 || sonnum[1] == 248 || sonnum[1] == 252 ||sonnum[1] == 254) {
if (sonnum[2] != 0 || sonnum[3] != 0) sonflag = -1;
} else sonflag = -1;
} else if (sonnum[0] == 128 || sonnum[0] == 192 ||sonnum[0] == 224
|| sonnum[0] == 240 || sonnum[0] == 248 || sonnum[0] == 252 ||sonnum[0] == 254) {
if(sonnum[1]!=0 || sonnum[2]!=0 || sonnum[3]!=0){
sonflag = -1;
}
}else sonflag = -1;
if (ipflag == -1 || sonflag == -1) {
wr = wr + 1;
continue;
}
if(1 <= ipnum[0] && ipnum[0] <= 127){
A++;
if(ipnum[0] == 10) pr++;
}else if(128 <= ipnum[0] && ipnum[0] <= 191){
B++;
if(ipnum[0] == 172 && ipnum[1] >= 16 && ipnum[1] <= 31) pr++;
}else if(192 <= ipnum[0] && ipnum[0] <= 223){
C++;
if(ipnum[0] == 192 && ipnum[1] == 168) pr++;
}else if(224 <= ipnum[0] && ipnum[0] <= 239){
D++;
}else if(240 <= ipnum[0] && ipnum[0] <= 255){
E++;
}
}
System.out.print(A + " " + B + " " + C + " " + D + " " + E + " " + wr + " " + pr);
}
}
联想公司福利 1500人发布