一:题目

给出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. Nginx基本参数调优

    Nginx基本参数 #运行用户 user nobody; #worker进程的个数:通常应该为物理CPU核数减1: #可以为”auto”,实现自动设定(worker_processes  auto) ...

  2. 缺包与maven

    一. 缺包 1. 打开pom.xml 将依赖加入. 2. mvn clean install -DskipTests 3. scp target/lib/****.jar(刚刚的依赖的架包) 服务器地 ...

  3. HMM 模型输入数据处理的优雅做法 来自实际项目

    实际项目我是这样做的: def mining_ue_procedures_behavior(seq, lengths, imsi_list): print("seq 3:", se ...

  4. GET和POST的区别【转载】

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...

  5. el-input maxlength 不限制长度

    背景: 小鱼最近使用 input输入框时想限制输入的长度, type = "number" 时,限制的长度无效,代码如下 <el-input v-model="fo ...

  6. 洛谷P2051 中国象棋【dp】

    题目:https://www.luogu.org/problemnew/show/P2051 题意:n*m的格子里放炮,使他们不能互相攻击. 如果两个炮在同一行同一列并且中间还有一个棋子的话就可以攻击 ...

  7. 安装部署mongodb

    准备 groupadd mongodb useradd -g mongodb mongodb echo password |passwd --stdin mongodb mkdir -pv /data ...

  8. IntelliJ IDEA——数据库集成工具(Database)的使用

    https://www.cnblogs.com/huiyi0521/p/10125537.html idea集成了一个数据库管理工具,可以可视化管理很多种类的数据库,意外的十分方便又好用.这里以ora ...

  9. IDEA控制台中文乱码解决

    关于IDEA中文乱码的解决方法,如下. 1.打开idea安装目录,选择 打开文件,末尾添加-Dfile.encoding=UTF-8 2.打开IntelliJ IDEA>File>Sett ...

  10. Greenplum 表空间和filespace的用法

    转载:https://yq.aliyun.com/articles/190 Greenplum支持表空间,创建表空间时,需要指定filespace.postgres=# \h create table ...