华为oj 识别有效的IP地址和掩码并进行分类统计
来源:互联网 发布:php curl 保存cookie 编辑:程序博客网 时间:2024/05/02 21:49
此题,可以说挺难,但我认为不是难,是恶心,没有什么高深的算法,只是有很多细节要注意,此题分两步。
1.将字符串转换成对应的ip地址和子网掩码。
2.进行分类,判断。
当然对于ip的分类比较好分类,但是子网掩码你需要判断,是不是开头全是1之后全是0,这也比较恶心。
在上代码之前,说一下,这道题测试用例就1个,而且就是题目给出的,你直接cout<<"1 0 1 0 0 2 1"就能通过,但是我不建议这样做,自己尝试写写,折磨一下,会有进步的。
#include<iostream>#include<string>using namespace std;bool IsSafe(unsigned char n){bool flag = false;while (n){if (!(n & 0x80)){flag = true;}else{if (flag){return false;}}n = n << 1;}return true;}void Calculate(int *ip, int *subnet, int &a, int &b, int &c, int &d, int &e, int &ipError, int &privateIp){int i = 0;bool isIpError = false;bool isSubNetError = false;for (; i < 4; i++){if (ip[i] < 0 || ip[i] > 255){isIpError = true;break;}}//子网掩码bool numFlag = false;for (i = 0; i < 4; i++){if (!numFlag){if (subnet[i] != 255){if (IsSafe(subnet[i])){numFlag = true;}else{isSubNetError = true;break;}}else{continue;}}else{if (subnet[i] != 0){isSubNetError = true;break;}}}if (isIpError || isSubNetError){ipError++;}else{//ip分类if (ip[0] >= 0 && ip[0] <= 126){a++;}else if (ip[0] >= 128 && ip[0] <= 191){b++;}else if (ip[0] >= 192 && ip[0] <= 223){c++;}else if (ip[0] >= 224 && ip[0] <= 239){d++;}else if (ip[0] >= 240 && ip[0] <= 255){e++;}//私有Ipif (ip[0] == 10 || (ip[0] == 172 && ip[1] >= 16 && ip[1] <= 31) || (ip[0] == 192 && ip[1] == 168)){privateIp++;}}}void Trans(string inStr, int *ip, int *subnet){int i = 0, j = 0;int tmp = 0;bool flag = false;//ipwhile (1){while (inStr[i] != '.' && inStr[i] != '~'){tmp = tmp * 10 + inStr[i] - '0';flag = true;i++;}if (flag){flag = false;ip[j] = tmp;tmp = 0;}if (inStr[i] == '~'){break;}i++;j++;}j = 0;tmp = 0;i++;//subnetwhile (1){while (inStr[i] != '.' && i < inStr.size()){tmp = tmp * 10 + inStr[i] - '0';flag = true;i++;}if (flag){flag = false;subnet[j] = tmp;tmp = 0;}if (i == inStr.size()){break;}i++;j++;}}int main(){int ip[4], subnet[4];string inStr = "";int i = 0, j = 0;//初始化for (; i < 4; i++){ip[i] = -1;subnet[i] = -1;}int A = 0, B = 0, C = 0, D = 0, E = 0, IPError = 0, PrivateIP = 0;while (getline(cin, inStr)){Trans(inStr, ip, subnet);Calculate(ip, subnet, A, B, C, D, E, IPError, PrivateIP);for (j = 0; j < 4; j++){ip[j] = -1;subnet[j] = -1;}}cout << A << ' ' << B << ' ' << C << ' ' << D << ' ' << E << ' ' << IPError << ' ' << PrivateIP << endl;return 0;}
0 0
- 华为OJ(识别有效的IP地址和掩码并进行分类统计)
- 华为OJ中级题-识别有效的IP地址和掩码并进行分类统计
- 【华为OJ】【018-识别有效的IP地址和掩码并进行分类统计】
- 华为oj 识别有效的IP地址和掩码并进行分类统计
- 华为Oj--识别有效的IP地址和掩码并进行分类统计
- 华为oj中级 识别有效的IP地址和掩码并进行分类统计
- 华为OJ——识别有效的IP地址和掩码并进行分类统计
- [华为机试练习题]34.识别有效的IP地址和掩码并进行分类统计
- 华为机试——识别有效的IP地址和掩码并进行分类统计
- 华为机试——识别有效的IP地址和掩码并进行分类统计
- 华为机试题——识别有效的IP地址和掩码并进行分类统计
- 【华为OJ18】识别有效的IP地址和掩码并进行分类统计
- 华为机试---识别有效的IP地址和掩码并进行分类统计
- OJ中----识别有效的IP地址和掩码并进行分类统计
- 华为OJ训练之0033-170111-识别有效的IP地址和掩码并进行分
- 识别有效的IP地址和掩码并进行分类
- 识别有效的IP地址和掩码并进行分类统计
- 识别有效的IP地址和掩码并进行分类统计
- 6.OpenCV 简介(cxcore, ml)
- [安卓开发] Android Studio导入SlidingMenu的两种方法(超详细)
- 贪心--ACM-ICPC Live Archive3902 Networkt
- IOS 为Button添加一个提示数量的角标
- Greedy algorithm
- 华为oj 识别有效的IP地址和掩码并进行分类统计
- 蓝桥杯 日期计算(java题解)
- tjut 3011
- JDBC片段学习关于DatabaseMetaData
- Android 选择相册 为空
- 基于S3C2440构建根文件系统
- 并查集笔试题
- Spring jar 下载地址
- Tensorflow一些常用基本概念与函数(4)