题解 | #识别有效的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; }