HDOJ 2206:IP的计算 这道题的边界条件可以挑战你的想象力

来源:互联网 发布:闲鱼.淘宝二手 编辑:程序博客网 时间:2024/05/16 08:23

    这道题目跟我去雷军的小米科技三面的一道面试题有些类似,现在想起来当时并没有对边界条件做过多的考虑。

    这道题目的URL:http://acm.hdu.edu.cn/showproblem.php?pid=2206

    自己总结起来,一个合法的IP表达式应该满足下面几个条件。

    1.每个ip小节的值不应该超过255,此外每个小节的字数都不能多于四个,

      356.1.1.1

      0356.1.1.1

      都是不合法的。

    2.只能出现四个ip小节,

      1.1.1

      1.1.1.

     3.点号只能出现3次

       1.1.1

        1.1.1.1.

     4.显然不能出现数字和点号之外的字符。

     啊,做完这道题目之后,感慨颇深,太考验想象力了,字符处理起来还很需要一些技巧。贴一下我的AC代码,和大家分享一下,欢迎拍砖。

     

#include<iostream>#include<string.h>#include<stdio.h>using namespace std;const int Max = 110;char ip[Max];int main(){int cur;bool legal;bool numPro;int dotNum;int nodeNum;int curNum;while(cin.getline(ip, Max)){int len = strlen(ip);cur = 0;legal = true;numPro = false;dotNum = 0;nodeNum = 0;curNum = 0;for(int i=0; i<=len; i++){if(ip[i] >= '0' &&  ip[i] <= '9'){cur = cur * 10 + ip[i] - '0';numPro = true;curNum ++;if(cur > 255){legal = false;break;}if(curNum > 3){legal = false;break;}}else if(ip[i] == '.'){if(numPro) {nodeNum++;numPro = false;}cur = 0;dotNum ++;curNum = 0;if(dotNum > 3){legal = false;break;}}else if(i == len){if(cur > 255){legal = false;}if(numPro) nodeNum ++;if(dotNum != 3) legal = false;if(nodeNum != 4) legal = false;}else{legal = false;break;}}if(legal) cout << "YES" << endl;else cout << "NO" << endl;}system("pause");return 0;}

 


原创粉丝点击