UVA 1590 IP Networks JAVA
题意:输入m代表接下来的数据个数,计算接下来输入数据的网络掩码,和最小网络地址。 思路:
①子网掩码:先将数据转为二进制,判断从哪一位开始有数据不一样,记下下标index,
则子网掩码是index的前面是1,后面是0(2#),就是子网掩码,再转为10#输出;
②最小网络地址:用任意一个IP与子网掩码进行按位与运算得出最小IP,与运算的符号为&。
import java.util.Scanner;
public class UVA1590 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int m;
while(scanner.hasNext())
{
m=scanner.nextInt();
String[][] strTwo=new String[1000][4];//输入的数据存为二进制
StringBuffer[] stringBuffer=new StringBuffer[4];
int[] resCover=new int[4];//掩码结果 10#
int[] resMin=new int[4];//最小网络地址结果 10#
int [][] numTen = new int[1000][4];//输入的数据存为10进制
for(int i=0;i<m;i++)
{
String string=scanner.next();
String [] strTen=string.split("\\.");//"."有特殊含义,要加\\
int [] numTwo=new int[4];
for(int j=0;j<strTen.length;j++)
{
//ε=(´ο`*)))唉,不知道为什么我这么麻烦
numTen[i][j]=Integer.parseInt(strTen[j].toString());//string->int 10#
strTwo[i][j]=Integer.toBinaryString(numTen[i][j]);//10#->2#
numTwo[j]=Integer.parseInt(strTwo[i][j]);//string->int 2#
strTwo[i][j]=String.format("%08d", numTwo[j]);//2# 标准化,如果有1000->00001000
}
}
int index=32;//最左一个不同出现的地方的下标,他前面全是1,后面全是0(子网掩码)
boolean flag=true;
for(int j=0;j<4&&flag;j++)
{
for(int k=0;k<8&&flag;k++)
{
char ch=strTwo[0][j].charAt(k);
for(int l=0;l<m;l++)
{
if(strTwo[l][j].charAt(k)!=ch)
{
index=(j)*8+k;
flag=false;
break;
}
}
}
}
StringBuffer Cover=new StringBuffer();
StringBuffer[] strCover=new StringBuffer[4];
strCover[0]=new StringBuffer();
strCover[1]=new StringBuffer();
strCover[2]=new StringBuffer();
strCover[3]=new StringBuffer();
for(int j=0,n=0;j<32;j++)
{
if(j<index)
strCover[j/8].append('1');
else
strCover[j/8].append('0');
}
for(int j=0;j<4;j++)
{
resCover[j]=Integer.parseInt(strCover[j].toString(), 2);
}
int indexmin=0;//与掩码相与的下标
for(int j=0;j<4;j++)
{
int res=resCover[j]&numTen[indexmin][j];//任意一个子网与掩码相与,则为最小网络地址
resMin[j]=res;
}
for(int j=0;j<4;j++)
{
if(j!=0)
System.out.print(".");
System.out.print(resMin[j]);
}
System.out.print("\n");
for(int j=0;j<4;j++)
{
if(j!=0)
System.out.print(".");
System.out.print(resCover[j]);
}
System.out.print("\n");
}
}
}
UVA 1590 IP Networks JAVA的更多相关文章
- uva 1590 - IP Networks(IP地址)
习题4-5 IP网络(IP Networks, ACM/ICPC NEERC 2005, UVa1590) 可以用一个网络地址和一个子网掩码描述一个子网(即连续的IP地址范围).其中子网 掩码包含32 ...
- Uva 1590 IP Networks
这道题目是一道关于IP地址的题目,要深入理解这道题需要有一定的网络基础. 这道题目我第一次做的时候虽然也AC了,但代码写的比较复杂,不够精炼.近期刚刚参加了网络方面的培训,在有一定知识的基础上,又重写 ...
- UVa 1590 IP网络(简单位运算)
Description Alex is administrator of IP networks. His clients have a bunch of individual IP addres ...
- IP Networks UVA - 1590
Alex is administrator of IP networks. His clients have a bunch of individual IP addresses and he de ...
- 位运算基础(Uva 1590,Uva 509题解)
逻辑运算 规则 符号 与 只有1 and 1 = 1,其他均为0 & 或 只有0 or 0 = 0,其他均为1 | 非 也就是取反 ~ 异或 相异为1相同为0 ^ 同或 相同为1相异为0,c中 ...
- 海量日志数据提取某日访问百度次数最多的那个IP的Java实现
海量日志数据提取某日访问百度次数最多的那个IP的Java实现 前几天在网上看到july的一篇文章<教你如何迅速秒杀掉:99%的海量数据处理面试题>,里面说到百度的一个面试题目,题目如下: ...
- [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...
- IP和java.net.InetAddress类的使用
一.IP 1.地址格式 互联网上每一台计算机都有一个唯一标示自己的标记,这个标记就是IP地址.IP 地址使用32 位长度二进制数据标示,一般在实际中看到的大部分IP地址都是以十进制的数据形式标示的,如 ...
- java检测http请求的ip地址 Java问题通用解决代码
以后再用到的话,至少能起个参考作用 java实现,struts2的Action中,依赖HttpServletRequest package net.dookoo.web.action; i ...
随机推荐
- spring boot 自动配置原理
1).spring boot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration,先看一下启动类的main方法 public ConfigurableApplic ...
- Metasploit
1.启动Metasploit 声明:本次渗透测试的主机是我自己在自己的攻击主机上搭建的另一个操作系统,为了真实性设置了常见的IP地址,如有重合但绝对不是任何实体公司或者单位的IP地址. 所以不承担任何 ...
- tail -f -n 0 /var/log/messages
<pre><font color="#CC0000"><b>root@kali</b></font>:<font ...
- bzoj 4011
看了好多篇题解才看懂的题,我实在太菜了... 首先根据一个我不知道的算法,可以证明在没有加入新的边的时候,原图的所有生成树的方案数就是所有点(除1以外)的度之积 那么在新加入这条边之后,我们仍然可以这 ...
- Android Studio 设置编辑器(Editor)的字体、字体大小
操作系统:Windows 10 x64 IDE:Android Studio 3.2.1 参考:https://www.cnblogs.com/diyishijian/p/6824328.html 备 ...
- Jenkins删除或替换All view
一.Jenkins删除All view “系统管理”→“系统设置”页面,更改“Default view”的下拉选项.(前提你已经新建了新的view) 二.My Views删除All view “用户” ...
- linux下配置docker和splash(图文)
所需要环境:ubuntu16.04 第一步用:sudo apt install docker.io 第二步:完成后查看一下有没有成功 命令:docker -v,如果是输入错了写成了大V他会提示你有哪些 ...
- 使用python调用shell判断当前进程是否存在
使用subprocess模块判断当前进程是否存在 #! /usr/bin/env python import subprocess res = subprocess.Popen(r'ps -ef |g ...
- python练习册 0002随机生成验证
这个题需要用到random库的方法,不用就会忘,暂把random库的常用方法贴出来 import random import string # 随机整数 # randint(a, b),生成a~b之间 ...
- Orchard是如何工作的?
文章翻译自http://docs.orchardproject.net/Documentation/How-Orchard-works 对Orchard的理解还不深刻,翻译可能有不好的地方. ...