一:题目

给出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. 基于GitLab CI搭建Golang自动构建环境

    基于GitLab CI搭建Golang自动构建环境 Golang发布遇到的问题 对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程: 方案一 开发者本地环境需要将环境变量文件改 ...

  2. k8s的pod的资源调度

    1.常用的预选策略 2.优选函数 3.节点亲和调度 3.1.节点硬亲和性 3.2.节点软亲和性 4.Pod资源亲和调度 4.1.Pod硬亲和度 4.2.Pod软亲和度 4.3.Pod反亲和度 5.污点 ...

  3. @PostMapping和@PutMapping区别

    @PostMapping和@PutMapping作用等同,都是用来向服务器提交信息.如果是添加信息,倾向于用@PostMapping,如果是更新信息,倾向于用@PutMapping.两者差别不是很明显 ...

  4. git daemon 安装和使用

    git daemon 安装和使用 系统:Cent OS 8 安装 git 和 git daemon(不同系统有不同的安装命令) yum install -y git yum install -y gi ...

  5. 推荐python入门书籍(爬虫方面)

    学爬虫,需要理论与实践相结合,Python生态中的爬虫库多如牛毛,urllib.urllib2.requests.beautifulsoup.scrapy.pyspider都是爬虫相关的库,但是如果没 ...

  6. WINDOWS 10下64位本地 ORACLE 11 G安装完整教程

    URL:https://www.cnblogs.com/count-mjb/p/7655592.html wssbht = (DESCRIPTION = (ADDRESS_LIST = (ADDRES ...

  7. 分治 FFT学习笔记

    先给一道luogu板子题:P4721 [模板]分治 FFT 今天模拟有道题的部分分做法是分治fft,于是就学了一下.感觉不是很难,国赛上如果推出式子的话应该能写出来. 分治fft用来解决这么一个式子\ ...

  8. Python中一些高效的数据操作

    列表统计 chars = ["a", "b", "a", "c", "a", "d&quo ...

  9. 对C#中事件的简单理解

    对于C#中的事件,我举了个简单的例子来理解事件及其处理. 这个例子中母亲是事件的发布者,事件是吃饭了.儿子和父亲是事件的订阅者,各自的Eat方法是处理事件的方法. 下面是详细的加注的例子: using ...

  10. Ubuntu14.04系统显示器不自动休眠修改

    -----设置Ubuntu14.04不自动锁屏,常亮 右上角的菜单打开system setting ----- brightness&lock按钮 1. 2. 参考: https://blog ...