算法习题---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 ...
随机推荐
- JVM堆空间用途分析与划分依据
在上一次[https://www.cnblogs.com/webor2006/p/9876493.html]已经对JVM的内存空间的划分进行了理论化的学习,这次还是对上一次提到的理论进行进一步的补充, ...
- 一份令人愉快的vs代码包和资源的整理清单
https://viatsko.github.io/awesome-vscode/ https://github.com/viatsko/awesome-vscode
- eclipse跳转到exitCurrentThread
1.在使用Eclipse时,用Debug模式运行springboot项目,结果总是在项目快启动成功的时候,跳转到exitCurrentException这个地方 2.方法:Eclipse->[P ...
- sql server 悲观锁和乐观锁的作用
sql server对并发的处理-乐观锁和悲观锁 假如两个线程同时修改数据库同一条记录,就会导致后一条记录覆盖前一条,从而引发一些问题. 例如: 一个售票系统有一个余票数,客户端每调用一次出票方法,余 ...
- spring boot 实现多个 interceptor 并指定顺序
首先我们创建Interceptor,实现HandlerInterceptor覆写方法:一.下面我创建了三个拦截器:MyInterceptor,UserInterceptor,StudentInterc ...
- MVC 元数据验证
ASP.NET MVC 3 Validation - 正则表达式验证RegularExpressionAttribute之日期验证 http://blog.csdn.net/jackvs/articl ...
- CF837D Round Subset 动态规划
开始的时候数据范围算错了~ 我以为整个序列 2 和 5 的个数都不超过 70 ~ 一个非常水的 dp code: #include <bits/stdc++.h> #define M 75 ...
- 论自动AC机
O(∩_∩)O哈哈~第一篇原创博客.终于结束了我“无敌转载王”的称号了!!!好开心! (⊙v⊙)嗯,看到标题觉得我是神犇的人,请再次仔细看看标题,是“自动AC”,而非“AC自动”哦!这是利用lemon ...
- Django系列(三):单表操作
1.ORM简介 MTV或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- Sprite Atlas与Sprite Mask详解
https://www.sohu.com/a/169409304_280780 Unity 2017.1正式发布后,带来了一批能帮助大家更加简化工作流的新功能.今天这篇文章,将由Unity技术经理成亮 ...