一:题目

给出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)的更多相关文章

  1. 【算法习题】数组中任意2个(3个)数的和为sum的组合

    题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...

  2. Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构

    Batch Normalization Batch Normalization是深度学习领域在2015年非常热门的一个算法,许多网络应用该方法进行训练,并且取得了非常好的效果. 众所周知,深度学习是应 ...

  3. Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强

    本文主要介绍一个支持图片自动预取.支持多种缓存算法的图片缓存的使用及功能.图片较大需要SD卡保存情况推荐使用ImageSDCardCache. 与Android LruCache相比主要特性:(1). ...

  4. (ZT)算法杂货铺——分类算法之贝叶斯网络(Bayesian networks)

    https://www.cnblogs.com/leoo2sk/archive/2010/09/18/bayes-network.html 2.1.摘要 在上一篇文章中我们讨论了朴素贝叶斯分类.朴素贝 ...

  5. 【Java/Android性能优5】 Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强

    本文转自:http://www.trinea.cn/android/android-imagecache/ 主要介绍一个支持图片自动预取.支持多种缓存算法.支持二级缓存.支持数据保存和恢复的图片缓存的 ...

  6. 【Java/Android性能优 4】PreloadDataCache支持预取的数据缓存,使用简单,支持多种缓存算法,支持不同网络类型,扩展性强

    本文转自:http://www.trinea.cn/android/preloaddatacache/ 本文主要介绍一个支持自动向前或向后获取新数据的缓存的使用及功能.Android图片内存缓存可见I ...

  7. 卷积神经网络(CNN)学习算法之----基于LeNet网络的中文验证码识别

    由于公司需要进行了中文验证码的图片识别开发,最近一段时间刚忙完上线,好不容易闲下来就继上篇<基于Windows10 x64+visual Studio2013+Python2.7.12环境下的C ...

  8. July 算法习题 - 字符串4(全排列和全组合)

    https://segmentfault.com/a/1190000002710424 思想:当前层各节点首元素不同,则各节点的剩余元素也不同:下一层节点交换范围为首元素以外的元素 全排列算法: vo ...

  9. 算法习题---4-9数据挖掘(Uva1591)

    一:题目 这是最懵逼的一道题,什么鬼......... [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说) 二:代码实现 #defin ...

随机推荐

  1. 2019-ACM-ICPC-南京区网络赛-E. K Sum-杜教筛+欧拉定理

    2019-ACM-ICPC-南京区网络赛-E. K Sum-杜教筛+欧拉定理 [Problem Description] 令\(f_n(k)=\sum_{l_1=1}^n\sum_{l_2=1}^n\ ...

  2. POI进行导出时候发现有不可读取的内容

    通过后台查询数据,然后使用poi进行导出时候,excel进行打开会出现下面的异常: 但是在WPS中就没有问题, 如果点击否,则不会显示任何内容,点击是,就会弹出来 查看修改记录为: 刚开始也进行了很多 ...

  3. springboot+支付宝完成秒杀项目的初体验

    springboot+支付宝完成秒杀项目的初体验 思考的问题: 首先是秒杀的商品查询,考虑到是热点数据,所以写一个接口读取当日批次的秒杀商品到redis中(那么接下来对商品的操作都放入redis中). ...

  4. Airtest---UI自动化测试项目

    Airtest Project是网易游戏团队新开源出来的一款用于UI自动化测试的项目. testerhome中的文档介绍:https://testerhome.com/topics/12486 官方链 ...

  5. 关于LinkedList for OpenJDK

    概述      LinkedList采用底层采用双向链表结构,与ArrayList的数组结构不一样.LinkedList因数据结构不一样,不需要申请连续内存,可以利用碎片内存.元素保存数据内容外还需要 ...

  6. 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解

    http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...

  7. GBDT算法梳理

    1.GBDT(Gradient Boosting Decision Tree)思想 Boosting : 给定初始训练数据,由此训练出第一个基学习器: 根据基学习器的表现对样本进行调整,在之前学习器做 ...

  8. 微信&QQ中打开网页提示“已停止访问该网页”是怎么回事?

    背景 大家是不是经常会遇到这种情况,分享出去的网页链接在微信里或者QQ里打开会提示“已停止访问该网页”,当大家看到这种的提示的时候就说明你访问的网页已经被腾讯拦截了. 当大家遇到以上这种情况的时候要怎 ...

  9. 006——转载-MATLAB数字与字符之间的转换

    (一)参考文献:https://jingyan.baidu.com/article/5bbb5a1bd8dcb113eba1799d.html (二)数字转换成字符串 第一步在我们的电脑上打开matl ...

  10. LA、Remember the Word (字典树, 简单dp)

    传送门 题意: 给你一个初始串 S,strlen(s) <= 3e5  然后给你 n 个单词. n <= 4000,  每个单词的长度不超过 100 : 问你这个初始串,分割成若干个单词的 ...