目录
- 一、选择题
- 二、编程题
- 2.1 合唱团
- 2.1.1 题目
- 2.1.2 题解
- 2.2 马戏团
- 2.2.1 题目
- 2.2.2 题解
一、选择题
(1)对于IP地址130.63.160.2,MASK为255.255.255.0,子网号为(B)
A.160.2
B.160
C.63.160
D.130.63.160
130.63.160.2为B类地址,网络号占16位,为130.63,根据MASK得知子网号占8位,位160
(2)TCP释放连接的过程,叙述不正确的是(B)
A.通过设置FIN来表示释放连接
B.当一方释放连接后另一方即不能继续发送数据
C.只有双方均释放连接后,该连接才被释放
D.释放连接采用四次挥手机制
FIN表示关闭连接请求,但是FIN只表示自己不再继续发送数据,不表示自己不在接收数据,四次挥手完毕后连接被释放
(3)查看TCP连接的命令是什么(C)
A.tcpdump
B.top
C.netstat
D.ifconfig
tcpdump用于网卡抓包;top用于查看cpu资源使用率;netstat用于查看网络通信连接状态;ifconfig用于查看网卡信息
(4)下列关于NAT的描述,错误的是(D)
A. NAT是一种把内部私有网络地址翻译成合法网络IP地址的技术
B. NAT的实现方式有三种,即静态转换Static Nat,动态转换Dynamic Nat和端口多路复用OverLoad
C. NAT可以有效地缓解IP地址不足的问题
D. 虚拟机里配置NAT模式,需要手工的为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段
NAT-网络地址转换技术,用于组建私网,给主机分配私网地址,对外通信时转换为对外的公网地址进行通信,用于节省公网地址的使用
虚拟机中的地址都是DHCP动态分配的,不需要手动设置
二、编程题
2.1 合唱团
2.1.1 题目
2.1.2 题解
代码:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++){
arr[i]=scanner.nextInt();
}
int k=scanner.nextInt();
int d=scanner.nextInt();
System.out.println(getMax(arr,n,k,d));
}
public static long getMax(int[] arr,int n,int k,int d){
long[][] maxV=new long[n+1][k+1];
long[][] minV=new long[n+1][k+1];
long ret=0;
for(int i=1;i<=n;i++){
maxV[i][1]=minV[i][1]=arr[i-1];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++){
for(int m=i-1;m>=Math.max(i-d,1);m--){
maxV[i][j]=Math.max(maxV[i][j],
Math.max(maxV[m][j-1]*arr[i-1],minV[m][j-1]*arr[i-1]));
minV[i][j]=Math.min(minV[i][j],
Math.min(maxV[m][j-1]*arr[i-1],minV[m][j-1]*arr[i-1]));
}
}
ret=Math.max(ret,maxV[i][k]);
}
return ret;
}
}
2.2 马戏团
2.2.1 题目
2.2.2 题解
思路:根据体重进行升序排序,体重相同的根据身高降序排序(体重相同时,只有身高也相同才可以站在自己肩上),然后求身高这一列的最大上升子序列
代码:
import java.util.*;
class node implements Comparable<node>{
int w;
int h;
public node(int w,int h){
this.w=w;
this.h=h;
}
public int compareTo(node o){
int ret=this.w-o.w;
if(ret==0){ //体重相同时,根据身高降序排列
return o.h-this.h;
}
return ret;
}
}
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextInt()){
int n=scanner.nextInt();
node[] arr=new node[n];
for(int i=0;i<n;i++){
scanner.nextInt();
arr[i]=new node(scanner.nextInt(),scanner.nextInt());
}
System.out.println(getMaxLength(arr,n));
}
}
private static int getMaxLength(node[] arr,int n){
Arrays.sort(arr);
int[] dp=new int[n];
int ret=1;
for(int i=0;i<n;i++){
dp[i]=1; //全部都初始化为1
for(int j=0;j<i;j++){
if(arr[i].h>=arr[j].h){
dp[i]=Math.max(dp[i],dp[j]+1);
}
}
ret=Math.max(dp[i],ret);
}
return ret;
}
}