IP的计算------HDOJ杭电2206(写完脑洞大开,想象力要足够丰富)

2015-01-27 05:59:26 · 作者: · 浏览: 2
Problem Description 在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。

Input 输入有多个case,每个case有一行,不超过100个字符。
Output 对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。
Sample Input
192.168.100.16

Sample Output
YES
这题真的真的真的是超级挑战一个人的想象力!!!!!! 写完已跪!!!!!! 总结一下: 1.首先不能有空格 2.然后要有三个小数点 3.开头和结尾不能有小数点 4.小数点不能连续 5.两个小数点间的数字不能超过255,可以等于255,因为是2的8次方,是256,但是计数从0开始,所以最大只有255 6.举几个例子: 000.000.000.000 YES 0.0.0.0 YES 010.00.00.00 YES 255.256.255.255 NO 自己看看这几组过了没有 但是有一种情况我没有考虑,但是代码AC了,测试数据应该没有这种情况,所以我不敢判断对错 0000.0.0.0 这有一个区间的位数大于3,根据题意也没法推断出对错,所以就放着吧,反正测试数据没有这样的例子。 其实这种脑洞大开的题目杭电真的好多,最近一直在找。
#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        using namespace std; #define maxn 10000 + 6 char six[maxn]; char xp[maxn]; int liu[maxn]; int calcu(char s[]) { int len=strlen(s); int sum=0; for(int i=0;i
       
        15) ///最小和最大长度 { printf("NO\n"); continue; } if(six[0]=='.'||six[len-1]=='.') ///判断头尾有无dot { printf("NO\n"); continue; } int flag=1; for(i=0;i
        
         '9')&&six[i]!='.') { flag=0; break; } } if(flag==0) { printf("NO\n"); continue; } m=0; for(i=0;i
         
          3||len-1-liu[2]>3) { printf("NO\n"); continue; } if(liu[1]-liu[0]>4||liu[1]-liu[0]==1||liu[2]-liu[1]>4||liu[2]-liu[1]==1) { printf("NO\n"); continue; }*/ char l1[6]={},l2[6]={},l3[6]={},l4[6]={}; flag=0; for(i=0;i
          
           255||calcu(l2)>255||calcu(l3)>255||calcu(l4)>255) flag=1; if(flag) { printf("NO\n"); continue; } printf("YES\n"); } return 0; }