GUETOJ - 1099 同网CS (模拟检查是否同在内网;ip,子网掩码是否正确)
2014-03-06 22:40
483 查看
http://acm.guet.edu.cn/problemset/problem/1099
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_N = 101;
int N, M;
struct IP
{
int ip[4], nm[4];
const bool checkIp()
{
if(ip[0] == 127 || ip[0] == 0 || ip[0] == 255) return false;
for(int i = 0; i < 4; i++)
if(ip[i] < 0 || ip[i] >255)
return false;
return true;
}
bool checkNetmask()
{
int cnt1 = 0, cnt2 = 0;
for(int i = 0, flag = 0; i < 4; i++)
{
if(nm[i] < 0 || nm[i] >255)
return false;
if(nm[i] == 0)
{
cnt1++;
continue;
}
else if(nm[i] == 255)
{
cnt2++;
continue;
}
int t = nm[i];
do
{
if(!(t & 1) && flag)
return false;
else if(t & 1)
flag = 1;
} while (t = t>>1);
}
if(cnt1 == 4 || cnt2 == 4)
return false;
return true;
}
IP(int t[], int u[])
{
for(int i = 0; i < 4; i++) ip[i] = t[i];
for(int i = 0; i < 4; i++) nm[i] = u[i];
}
IP(int t[])
{
for(int i = 0; i < 4; i++) ip[i] = t[i];
}
bool checkSame(IP ip1)
{
for(int i = 0; i < 4; i++)
if((ip1.ip[i]&nm[i]) != (ip[i]&nm[i]))
return false;
return true;
}
};
int getIp(int ip[])
{
int c;
if(scanf("%d", ip) == EOF)
return 0;
for(int i = 1; i < 4; i++)
scanf("%c%d", &c, &ip[i]);
return 1;
}
int main()
{
//freopen("in.txt", "r", stdin);
int ip[4], nm[4];
getIp(ip);
int f = getIp(nm);
IP myIp(ip, nm);
if(!myIp.checkIp())
printf("Invalid IP address.\n");
if(!myIp.checkNetmask() && f)
printf("Invalid netmask address.\n");
scanf("%d", &N);
while(N--)
{
getIp(ip);
IP ip1(ip);
if(!ip1.checkIp())
printf("Invalid IP address.\n");
else
{
if(myIp.checkSame(ip1))
printf("let's rock\n");
else
printf("not you\n");
}
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_N = 101;
int N, M;
struct IP
{
int ip[4], nm[4];
const bool checkIp()
{
if(ip[0] == 127 || ip[0] == 0 || ip[0] == 255) return false;
for(int i = 0; i < 4; i++)
if(ip[i] < 0 || ip[i] >255)
return false;
return true;
}
bool checkNetmask()
{
int cnt1 = 0, cnt2 = 0;
for(int i = 0, flag = 0; i < 4; i++)
{
if(nm[i] < 0 || nm[i] >255)
return false;
if(nm[i] == 0)
{
cnt1++;
continue;
}
else if(nm[i] == 255)
{
cnt2++;
continue;
}
int t = nm[i];
do
{
if(!(t & 1) && flag)
return false;
else if(t & 1)
flag = 1;
} while (t = t>>1);
}
if(cnt1 == 4 || cnt2 == 4)
return false;
return true;
}
IP(int t[], int u[])
{
for(int i = 0; i < 4; i++) ip[i] = t[i];
for(int i = 0; i < 4; i++) nm[i] = u[i];
}
IP(int t[])
{
for(int i = 0; i < 4; i++) ip[i] = t[i];
}
bool checkSame(IP ip1)
{
for(int i = 0; i < 4; i++)
if((ip1.ip[i]&nm[i]) != (ip[i]&nm[i]))
return false;
return true;
}
};
int getIp(int ip[])
{
int c;
if(scanf("%d", ip) == EOF)
return 0;
for(int i = 1; i < 4; i++)
scanf("%c%d", &c, &ip[i]);
return 1;
}
int main()
{
//freopen("in.txt", "r", stdin);
int ip[4], nm[4];
getIp(ip);
int f = getIp(nm);
IP myIp(ip, nm);
if(!myIp.checkIp())
printf("Invalid IP address.\n");
if(!myIp.checkNetmask() && f)
printf("Invalid netmask address.\n");
scanf("%d", &N);
while(N--)
{
getIp(ip);
IP ip1(ip);
if(!ip1.checkIp())
printf("Invalid IP address.\n");
else
{
if(myIp.checkSame(ip1))
printf("let's rock\n");
else
printf("not you\n");
}
}
return 0;
}
相关文章推荐
- 如何检查IP是否为内网IP
- asp实现检查ip地址是否为内网或者私有ip地址的代码分享
- asp实现检查ip地址是否为内网或者私有ip地址的代码分享
- C语言检查ip是否合法
- 判断ip 是否正确 python
- C# 使用API检查域用户名和密码是否正确
- Python实现模拟Modbus Master遍历测试Modbus Slave IP是否连通
- sharepoint 2010 在线浏览office文件报错 "未找到所选的文件,请检查文件名的拼写并验证其位置是否正确"
- php根据ip段以及子网掩码,判断某ip是否处于某子网下
- php判断ip是否是内网/外网ip
- 检查日期的格式 数字格式 是否正确
- json formatter(一个检查json格式是否正确的小工具)
- linux cksum命令参数及用法详解---检查文件的CRC是否正确
- 解决办法:mysql_connect()不支持请检查mysql模块是否正确加载
- 解决办法:mysql_connect()不支持请检查mysql模块是否正确加载
- 写一个脚本checkipadd.sh,判断所输入的参数是否为正确的IP地址,如 果是就输出"This is ip address";如果不是就输出"This is not ip address" (1
- json formatter(一个检查json格式是否正确的小工具)
- 发送短信验证码没有判断图形验证码是否正确,被攻击,临时用nginx限制ip访问
- android 接入支付宝支付 "订单签名错误,请检查PARTNER对应的密钥是否正确"
- 如何检查 IP是否冲突了