题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
#include <bits/stdc++.h>
#include <cstdio>
#include <type_traits>
using namespace std;
bool sm(int n) {
int a[9] = {255, 254, 252, 248, 240, 224, 192, 128, 0};
if (find(a, a + 9, n) - a == 9) {
return false;
}
return true;
}
int main() {
long long int a = -1, b = -1, c = -1, d = -1, e = -1, f = -1, g = -1, h = -1;
int cnt[5] = {0};
int cntp = 0;
int sum = 0;
while (scanf("%lld.%lld.%lld.%lld~%lld.%lld.%lld.%lld", &a, &b, &c, &d, &e, &f,
&g, &h) != EOF) {
if (a == 0 || a == 127) {
continue;
}
int count = 0;
if (a < 0 || b < 0 || c < 0 || d < 0 || e < 0 || f < 0 || g < 0 || h < 0) {
++count;
} else if ((e < f || f < g || g < h) || sm(e) == false || sm(f) == false ||
sm(g) == false || sm(h) == false || (e == 255 && f == 255 && g == 255 &&
h == 255)) {
++count;
}
if (count == 0) {
if (a < 127) cnt[0]++;
else if (a < 192) cnt[1]++;
else if (a < 224) cnt[2]++;
else if (a < 240) cnt[3]++;
else if (a < 256) cnt[4]++;
if ((a == 10) || (a == 172 && b >= 16 && b < 32) || (a == 192 && b == 168)) {
cntp ++;
}
}
sum += count;
a = -1, b = -1, c = -1, d = -1, e = -1, f = -1, g = -1, h = -1;
}
for (int i = 0; i < 5; i++) {
cout << cnt[i] << ' ';
}
cout << sum << ' ' << cntp;
}
查看10道真题和解析