【W】HDU2206——字符串处理(IP计算)
2010-02-27 14:15
771 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2206
有是一个比较变态的题目,在网上搜了很多关于注意事项的,都能检测出来啊!怎么还是AC不了呢????
1.注意输入数据中只能是数字和‘。'
2,“。”出现的是次数只能是3次,
3,每次间隔数字的值不能大于255
4,数字的长度不嫩超过3个,比如0001,就不行
有了这个4点应该可以通过了!!!!
2206太变态了,不知道wa了多少次,我就想不通了为什么000.000.000.000就是对的!
要注意有以下点
1.不能出现不是数字和点的其他字符
2.三个点四部分,每部分在0~256之间,且不能有任何一部分是空的(没有数字)
3.最变态的也就是这点,其实是想到的,就是每部分不是0,那么该部分首位就不能出现0
但是我想不通为什么是0的时候就可以重复
自己总结的规则:
1、不存在非法字符(除'.'和数字以外的字符)
2、3个'.'
3、每个10进制数最多3位,且无前导0
4、每个10进制数范围是[0,255]
以上是网上搜的注意事项,烦呀!
下面附我的未AC的代码,大牛来帮我看看呀!谢谢了...
看到一个人用JAVA写的,很简单的,怀疑是用了正则表达式...
有是一个比较变态的题目,在网上搜了很多关于注意事项的,都能检测出来啊!怎么还是AC不了呢????
1.注意输入数据中只能是数字和‘。'
2,“。”出现的是次数只能是3次,
3,每次间隔数字的值不能大于255
4,数字的长度不嫩超过3个,比如0001,就不行
有了这个4点应该可以通过了!!!!
2206太变态了,不知道wa了多少次,我就想不通了为什么000.000.000.000就是对的!
要注意有以下点
1.不能出现不是数字和点的其他字符
2.三个点四部分,每部分在0~256之间,且不能有任何一部分是空的(没有数字)
3.最变态的也就是这点,其实是想到的,就是每部分不是0,那么该部分首位就不能出现0
但是我想不通为什么是0的时候就可以重复
自己总结的规则:
1、不存在非法字符(除'.'和数字以外的字符)
2、3个'.'
3、每个10进制数最多3位,且无前导0
4、每个10进制数范围是[0,255]
以上是网上搜的注意事项,烦呀!
下面附我的未AC的代码,大牛来帮我看看呀!谢谢了...
#include<iostream> #include<string> using namespace std; bool isDigital(char ch) { if(ch>='0'&&ch<='9') return true; return false; } int main() { char strcin[105]; int i,j,k,t,len,x[4],sum; bool flg,zeroflg; while(cin.getline(strcin,100)) { len = strlen(strcin); flg = true; zeroflg = true; k = 0; x[0]=x[1]=x[2]=x[3]=0; for(i=0;i<len;i++) { if(i==0) { if(!isDigital(strcin[i])) //.213 { flg = false;break; } else { if(strcin[i]!='0') { zeroflg = false; } j=1; x[j] = strcin[i]-'0'; continue; } } if(isDigital(strcin[i])) { if(zeroflg&&strcin[i]!='0'&&j!=0) //不是0,那么该部分首位就不能出现0 { flg = false;break; } if(zeroflg&&strcin[i]=='0') j++; else j++; if(j<=0||j>=4) //12323 { flg = false;break; } x[j] = strcin[i]-'0'; } else if(strcin[i]=='.') { if(j<=0||j>=4) //.. { flg = false;break; } if(i==len-1) //145.45.445. { flg = false;break; } int m = 1; sum = 0; for(t=j;t>0;t--) // caculate { sum += m*x[t]; m*=10; } if(sum<0||sum>255) { flg = false;break; } j=0;k++; zeroflg = true; x[0]=x[1]=x[2]=x[3]=0; if(k>3) //154.15.85.84.81. dot more than three { flg = false;break; } } else //*216 { flg = false;break; } } if(flg) { cout<<"YES"<<endl; } else { cout<<"NO"<<endl; } memset(strcin,0,105); } return 0; }
看到一个人用JAVA写的,很简单的,怀疑是用了正则表达式...
相关文章推荐
- HDU 2206 IP的计算(字符串处理)
- HDU 2206 IP的计算(字符串处理)
- hdu 2206IP的计算(sscanf的使用 & 字符串判断处理)
- HDU 2206 IP的计算 字符串
- hdu 2206 IP的计算
- hdu 2206 IP计算
- hdu 2206 IP的计算
- HDU 2206:IP的计算
- HDU 2206 IP的计算
- HDU 2206 IP的计算(模拟题目)
- hdu2206IP的计算
- HDU 2206 IP的计算 WA
- IP的计算_hdu_2206(郁闷).java
- HDU-2206 IP的计算 简洁AC
- HDU 2206 IP的计算
- HDU 2206 IP的计算【经典题】
- hdu-2206-ip的计算
- IP计算_hdu_2206
- HDU 2206 - IP的计算
- HDU 2206 IP的计算 比较坑