这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。
题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=2206
麻烦的模拟题~~~~
说下这题要注意的几点吧。
1.不能有除了数字和'.'以外的其他字符,不光是判断空格。
- '.' 的数目必须是三个
3.每2个'.'之间的数字大小是0~255
4.没2个'.'之间的数字的个数要小于等于3个,且不能是0个。
5.根据我自己的思路,在判断三个'.'时,对第四个数要额外考虑。
考虑大小,个数等
比如:100.110.110. | 100.110.110.1000 | 100.110.110.333
这些情况都是NO,都得考虑。代码有点杂。大家互相学习吧。
这里多层循环退出麻烦,我第一次用了goto~~~呵呵。
// Author: Tanky Woo
#include
#include
#include
#include
using namespace std;
char ip[101];
int nCases;
int main()
{
T:while(gets(ip))
{
int len = strlen(ip);
for(int i=0; i'9' || ip[i]<'0') && ip[i] != '.')
{
printf("NO\n");
goto T;
}
}
int cnt = 0;
int num = 0;
int num_cnt = 0;
for(int i=0; i < len; ++i)
{
if(ip[len-1] == '.') // 最后一位是'.'
{
printf("NO\n");
goto T;
}
if(ip[i] == '.')
{
if((num < 0 || num > 255) || num_cnt==0 || num_cnt>3) // 数字大于255或者位数大于3或等于0
{
printf("NO\n");
goto T;
}
num = 0;
num_cnt = 0;
cnt++;
continue;
}
num *= 10;
num += ip[i]-'0';
num_cnt++;
if(i == len-1)
{
if((num < 0 || num > 255) || num_cnt==0 || num_cnt>3) // 数字大于255或者位数大于3或等于0
{
printf("NO\n");
goto T;
}
}
}
if(cnt == 3)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}