笔试强训(四十七)

目录

  • 一、选择题
  • 二、编程题
    • 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 题目

笔试强训(四十七)_第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.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;
  }
}

你可能感兴趣的:(笔试强训,java,开发语言)