算法习题---4-5IP网络(Uva1590)
一:题目
给出m(1到10000之间)个IP地址,求他们最小的网络号和子网掩码
(一)样例输入
3 表示要获取的IP地址个数
194.85.160.177 IP地址
194.85.160.183
194.85.160.178
(二)样例输出
194.85.160.176
255.255.255.248
二:代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> #define N 1000 int IP_Add[N][],num; //存放IP地址和个数
利用位移,与,或操作获取子网掩码
int getInterAddr()
{
int i, j, n,m,len=;
for (i = ; i < ;i++)
for (j = ; j < num;j++)
if (IP_Add[j][i] != IP_Add[j - ][i]) //若是和上一个地址不同,则跳出
goto Next;
Next: //上面两个for获取的是IP相同的数据组,下面获取不同组的相同位数
n = m = IP_Add[j - ][i];
for (j = ; j < num; j++)
n &= IP_Add[j][i],m|=IP_Add[j][i]; for (int k = ; k < i; k++) //开始打印部分网络号
printf("%d.", IP_Add[][k]);
//对n,m做右移操作,获取完整网络号
while (n != m) //比较n,m获取相同位数
{
n >>= , m >>= ;
len++; //len记录的是不同位数
}
printf("%d\n", n<<=len); //记得将n右移回去
//获取相同位数长度
return i*+-len;
}
根据网络号获取的位数来获取子网掩码
void getSubAddr(int len)
{
int n;
for (int i = ; i < len / ; i++)
printf("255.");
n = - ((int)pow(2.0, (double)( - len % )) - );
printf("%d", n);
for (int i = len / +; i < ; i++)
printf(".0");
printf("\n");
}
主函数
void main()
{
FILE* fp = freopen("data5.in", "r", stdin);
freopen("data5.out", "w", stdout);
int l; //记录子网掩码长度 scanf("%d", &num); //先读取IP个数
getchar();
//再读取所有IP
for (int i = ; i < num; i++)
{
scanf("%d.%d.%d.%d", &IP_Add[i][], &IP_Add[i][], &IP_Add[i][], &IP_Add[i][]);
getchar();
} //开始获取网络地址
l = getInterAddr();
//获取子网掩码
getSubAddr(l); freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
}
全部代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> #define N 1000 int IP_Add[N][],num; int getInterAddr()
{
int i, j, n,m,len=;
for (i = ; i < ;i++)
for (j = ; j < num;j++)
if (IP_Add[j][i] != IP_Add[j - ][i]) //若是和上一个地址不同,则跳出
goto Next;
Next: //上面两个for获取的是IP相同的数据组,下面获取不同组的相同位数
n = m = IP_Add[j - ][i];
for (j = ; j < num; j++)
n &= IP_Add[j][i],m|=IP_Add[j][i]; for (int k = ; k < i; k++) //开始打印部分网络号
printf("%d.", IP_Add[][k]);
//对n,m做右移操作,获取完整网络号
while (n != m) //比较n,m获取相同位数
{
n >>= , m >>= ;
len++; //len记录的是不同位数
}
printf("%d\n", n<<=len); //记得将n右移回去
//获取相同位数长度
return i*+-len;
} void getSubAddr(int len)
{
int n;
for (int i = ; i < len / ; i++)
printf("255.");
n = - ((int)pow(2.0, (double)( - len % )) - );
printf("%d", n);
for (int i = len / +; i < ; i++)
printf(".0");
printf("\n");
} void main()
{
FILE* fp = freopen("data5.in", "r", stdin);
freopen("data5.out", "w", stdout);
int l; //记录子网掩码长度 scanf("%d", &num); //先读取IP个数
getchar();
//再读取所有IP
for (int i = ; i < num; i++)
{
scanf("%d.%d.%d.%d", &IP_Add[i][], &IP_Add[i][], &IP_Add[i][], &IP_Add[i][]);
getchar();
} //开始获取网络地址
l = getInterAddr();
//获取子网掩码
getSubAddr(l); freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
}
全部代码
算法习题---4-5IP网络(Uva1590)的更多相关文章
- 【算法习题】数组中任意2个(3个)数的和为sum的组合
题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...
- Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构
Batch Normalization Batch Normalization是深度学习领域在2015年非常热门的一个算法,许多网络应用该方法进行训练,并且取得了非常好的效果. 众所周知,深度学习是应 ...
- Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强
本文主要介绍一个支持图片自动预取.支持多种缓存算法的图片缓存的使用及功能.图片较大需要SD卡保存情况推荐使用ImageSDCardCache. 与Android LruCache相比主要特性:(1). ...
- (ZT)算法杂货铺——分类算法之贝叶斯网络(Bayesian networks)
https://www.cnblogs.com/leoo2sk/archive/2010/09/18/bayes-network.html 2.1.摘要 在上一篇文章中我们讨论了朴素贝叶斯分类.朴素贝 ...
- 【Java/Android性能优5】 Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强
本文转自:http://www.trinea.cn/android/android-imagecache/ 主要介绍一个支持图片自动预取.支持多种缓存算法.支持二级缓存.支持数据保存和恢复的图片缓存的 ...
- 【Java/Android性能优 4】PreloadDataCache支持预取的数据缓存,使用简单,支持多种缓存算法,支持不同网络类型,扩展性强
本文转自:http://www.trinea.cn/android/preloaddatacache/ 本文主要介绍一个支持自动向前或向后获取新数据的缓存的使用及功能.Android图片内存缓存可见I ...
- 卷积神经网络(CNN)学习算法之----基于LeNet网络的中文验证码识别
由于公司需要进行了中文验证码的图片识别开发,最近一段时间刚忙完上线,好不容易闲下来就继上篇<基于Windows10 x64+visual Studio2013+Python2.7.12环境下的C ...
- July 算法习题 - 字符串4(全排列和全组合)
https://segmentfault.com/a/1190000002710424 思想:当前层各节点首元素不同,则各节点的剩余元素也不同:下一层节点交换范围为首元素以外的元素 全排列算法: vo ...
- 算法习题---4-9数据挖掘(Uva1591)
一:题目 这是最懵逼的一道题,什么鬼......... [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说) 二:代码实现 #defin ...
随机推荐
- GoogLeNet网络的Pytorch实现
1.文章原文地址 Going deeper with convolutions 2.文章摘要 我们提出了一种代号为Inception的深度卷积神经网络,它在ILSVRC2014的分类和检测任务上都取得 ...
- Light OJ - 1026 - Critical Links(图论-Tarjan算法求无向图的桥数) - 带详细注释
原题链接 无向连通图中,如果删除某边后,图变成不连通,则称该边为桥. 也可以先用Tajan()进行dfs算出所有点 的low和dfn值,并记录dfs过程中每个 点的父节点:然后再把所有点遍历一遍 ...
- 使用Topshelf创建Windows服务[转载]
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- 持续集成实践---基于ant+jmeter+jenkins接口CI
背景: 大纲: jmeter入门教程 jenkins入门教程 ant介绍 jmeter+ant脚本自动执行实践 接口测试CI实践
- 前端学习笔记--CSS布局--盒子模型
1.概述: 2.盒子模型 overflow属性: border属性: 1.padding属性: margin:
- python 查询每周最后一个工作日
背景: 做定时任务时,一般都是写死每周五XXXXX,但有时遇到节假日的情况,周五可能不是本周最后一个工作日 代码如下: import urllib2,datetime,json nowTime = d ...
- 七、Linq To XML:XElement、XDocument
一.概述 LINQ to XMLLINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework.NET Framework 编程语言中处理 XM ...
- Gitlab,Mac下生成SSH Key222
git是分布式的代码管理工具,远程的代码管理是基于ssh的,所以要使用远程的git则需要ssh的配置.简单的说,Git - 版本控制工具:Github是一个网站,提供给用户空间创建git仓储 ...
- js实现发送验证码倒计时效果
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- POJ-2689-Prime Distance(素数区间筛法)
链接: https://vjudge.net/problem/POJ-2689 题意: The branch of mathematics called number theory is about ...