目录
- 一、选择题
- 二、编程题
- 2.1 蘑菇矩阵
- 2.1.1 题目
- 2.1.2 题解
- 2.2 红与黑
- 2.2.1 题目
- 2.2.2 题解
一、选择题
(1)下列关于URL的描述错误的是(A)
A.http表名使用TCP协议
B.又名统一资源定位符,方便确定一个资源,并表示他在哪里
C.URL中隐藏了端口号,默认是80端口
D.访问URL可使用大写字母
(2)不属于交换机攻击的是(A)
A.目录遍历攻击
B.MAC防洪攻击
C.VLAN攻击
D.DHCP攻击
交换机攻击主要有以下5种类型:VALN跳跃攻击,生成树攻击,MAC表洪水攻击,ARP攻击,VTP攻击
DHCP攻击:DHCP欺骗攻击就是伪造真正的DHCP服务器为客户端主机分配一个错误的IP地址
DHCP攻击针对的目标是网络中的DHCP服务器,原理是耗尽DHCP服务器的所有IP地址资源,使其无法正确提供地址分配服务。然后在网络中再假设假冒的DHCP服务器为客户端分配IP地址,从而实现中间人攻击
DHCP攻击原理:DHCP没有认证机制,并不知道接收的报文是否是同一个主机发的,所以攻击者可以使用以下两种方式进行攻击
- 攻击者发送大量的DHCP Discover报文,堵塞DHCP服务器的处理速度,以至于瘫痪DHCP服务器
- 制造大量的伪造MAC地址来请求地址,导致DHCP服务器中的IP地址耗尽
目录遍历攻击是HTTP所存在的一个安全漏洞,它使得攻击者能够访问受限的目录,并在Web服务器的根目录以外执行命令。不属于交换机攻击
(3)IP地址块为211.168.15.192/26,211.168.15.160/27,211.168.15.128/27三个地址块经聚合后可用地址数为(A)
A.126
B.62
C.128
D.68
(4)以下不是合法的HTTP请求方法的是(B)
A.GET
B.SET
C.HEAD
D.PUT
二、编程题
2.1 蘑菇矩阵
2.1.1 题目
2.1.2 题解
思路:动态规划
dp[i][j]的含义是:从起点走到i,j位置且不踩到蘑菇的概率
代码:
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextInt()){
int n=scanner.nextInt();
int m=scanner.nextInt();
int k=scanner.nextInt();
int[][] map=new int[n+1][m+1];
while(k>0){
int x=scanner.nextInt();
int y=scanner.nextInt();
map[x][y]=1;
k--;
}
double[][] dp=new double[n+1][m+1];
dp[1][1]=1.0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(map[i][j]!=1 && !(i==1&& j==1)){
dp[i][j] = dp[i-1][j]*(j==m? 1.0:0.5) + dp[i][j-1]*
(i==n? 1.0:0.5);
}
}
}
System.out.printf("%.2f\n", dp[n][m]);
}
}
2.2 红与黑
2.2.1 题目
2.2.2 题解
思路:深度优先遍历
具体步骤:
step1:处理输入,在输入的过程中找到并记录起始位置x,y
step2:进行深度优先遍历,没到达一个位置,检查该位置是否为红瓷砖,如果是直接返回,如果不是count++,并将该位置修改为红瓷砖,防止重复计数
step3:分别深度遍历黑瓷砖的四个方向,进入递归之前检查下标的合法性
代码:
import java.util.*;
public class Main{
private static int count=0;
private static int[][] dirs={{-1,0},{1,0},{0,1},{0,-1}};
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
int m=scanner.nextInt();
int n=scanner.nextInt();
if(m * n==0){
continue;
}
int x=0;
int y=0;
char[][] map=new char[m][n];
for(int i=0;i<m;i++){
String s=scanner.next();
for(int j=0;j<n;j++){
map[i][j]=s.charAt(j);
if(map[i][j]=='@'){
x=i;
y=j;
}
}
}
count=0;
dfs(map,x,y,m,n);
System.out.println(count);
}
}
private static void dfs(char[][] map,int x,int y,int row,int col){
if('#' == map[x][y])
return;
// 说明(x, y)位置为黑砖, 将该砖遍历之后,修改其标记
++count;
map[x][y] = '#';
for(int i = 0; i < 4; ++i){
int nx = x + dirs[i][0];
int ny = y + dirs[i][1];
if(nx >= 0 && nx < row && ny >= 0 && ny < col){
dfs(map, nx, ny, row, col);
}
}
}
}