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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务