目录

网易实习笔试题——炸弹人编程

一、题目要求

二、实现逻辑

1.Enemy类

2.随机生成游戏布局

3.展示游戏布局

4.寻找炸弹人可达区域

5. 放炸弹炸死敌人

6.在可达区域放置两颗炸弹,并且统计最大杀敌数

7.Main类

三、总程序代码

1.Enemy类

2.Main类

3.运行结果

注意


网易实习笔试题——炸弹人编程

不久前参加了网易实习笔试,要求在一周内完成笔试题,第一道算法题为“炸弹人编程”。
由于时间紧迫(还有导师布置的项目需要完成),所以没有采用最优化的算法来解决,而是依照自己的想法编程,现记录下来。

编程语言:Java
编程软件:Intellj IDEA


一、题目要求

随机生成10x10的格状地图,33格墙(标记W),33格空地(标记0),33格敌人(标记E),1格为炸弹人(标记B)。
要求:
炸弹只能放在空地上,敌人和墙无法通过,确保炸弹人能够抵达空地安放炸弹。
炸弹可以消灭安放地点同行和同列的敌人,即上下左右四个方向炸开,爆炸冲击波碰到墙则停止。
炸弹人需要安放两个炸弹,两个炸弹如消灭同一个敌人则只计数1个。
最终打印输出:
1)10x10地图;
2)两个炸弹合计消灭敌人数量的最大值;
3)安放炸弹的两个位置坐标;
可以使用任意一种熟悉的编程语言。

输出示例:
00WW00WW00
0B00EEEWEE
0WW0WEWEWE
WE00E0WEEW
WEW0WW00WE
WEE0EEE0W0
WEW0WEW0WE
0WEE00E00E
0EW0WEWWW0
W00EEWEEE0

1号炸弹位置:(2,4)
2号炸弹位置:(6,4)
合计灭敌数:10

二、实现逻辑

拿到题目之后,先简要逐步分析。题目要求计算最大杀敌数, 因此问题可以细化为:随机生成游戏布局→遍历炸弹人可达区域→在可达区域放置炸弹→计算最大杀敌数。按照这个逻辑开始逐步编程(没有去研究更深的算法,单纯赶进度哈哈哈哈)。

当然,为了避免重复计算杀敌数(即两颗炸弹炸死同一敌人时,杀敌数计为1),新建了一个Enemy类,主要是为了记录下随机生成的游戏地图中,敌人(在地图中标记为E)的横坐标x、纵坐标y和是否被炸死(布尔型变量destroyed)。

整个程序比较简单,所以只有俩类——Enemy类和Main类。

1.Enemy类

代码如下:

public class Enemy implements Serializable {private int x;// 敌人横坐标private int y;// 敌人纵坐标private boolean destroyed = false;// 是否被摧毁public void setX(int x) {this.x = x;}public void setY(int y) {this.y = y;}public void setDestroyed(boolean destroyed) {this.destroyed = destroyed;}public int getX() {return x;}public int getY() {return y;}public boolean isDestroyed() {return destroyed;}
}

至于为什么要Serializable接口,是因为之后用到了List来存储敌人(Enemy类),而List对象之间的复制分为浅复制和深复制。浅复制只是把原List的地址给了新List,这样就会导致修改原List后,新List也会跟着一起改变。而我要的是两个独立的List,所以需要深复制。

深复制这一部分参考了其他人的内容,就把另一位同学的方法搬过来用了,代码如下,放在Main类中就行:

    // List深复制public static <T> List<T> DeepCopy(List<T> List) throws IOException, ClassNotFoundException {ByteArrayOutputStream ByteOut = new ByteArrayOutputStream();ObjectOutputStream Out = new ObjectOutputStream(ByteOut);Out.writeObject(List);ByteArrayInputStream ByteIn = new ByteArrayInputStream(ByteOut.toByteArray());ObjectInputStream In = new ObjectInputStream(ByteIn);@SuppressWarnings("unchecked")List<T> Temp = (List<T>) In.readObject();return Temp;}

2.随机生成游戏布局

这部分没啥好讲的,随机函数就完事儿了,也是放在Main类中,游戏布局采用String型二维数组存储,num是题目要求的33。代码如下:

    // BombGame随机生成游戏地图public static String[][] GameLayoutOutput() {int count = 0;int x = 0, y = 0, i = 0, j = 0;String[][] Layout = new String[n][n];Random random = new Random();// 初始化,全是空地for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {Layout[i][j] = "0";}}// 随机生成1个炸弹人,5面墙,5个敌人,5个空位// 生成炸弹人位置x = random.nextInt(n);y = random.nextInt(n);Layout[x][y] = "B";x_BombMan = x;y_BombMan = y;// 生成墙while (count < num) {// 没放完墙x = random.nextInt(n);y = random.nextInt(n);if (!Layout[x][y].equals("B")) {// 如果不是炸弹人的位置Layout[x][y] = "W";count++;}}// 生成敌人count = 0;while (count < num) {// 没放完敌人x = random.nextInt(n);y = random.nextInt(n);if (!Layout[x][y].equals("B") && !Layout[x][y].equals("W")) {// 如果不是炸弹人的位置,也不是墙的位置Layout[x][y] = "E";count++;}}return Layout;}

简单粗暴,因为忙不过来,肯定有其他更优化的代码。

此外还需要获取游戏地图中全部敌人的信息(坐标、是否被炸死),放在Main类中,代码如下:

    // 获取游戏地图中的敌人分布情况public static void getEnemyList(String[][] Layout) {int i, j;for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {if (Layout[i][j].equals("E")) {Enemy enemy = new Enemy();enemy.setX(i);enemy.setY(j);EnemyList.add(enemy);// 把敌人加入敌人清单,记录敌人的横坐标x和纵坐标y}}}}

EnemyList就是自定义的存储敌人信息的List,在Main类里面。定义如下:

    private static List<Enemy> EnemyList = new ArrayList<>();// 敌人清单

3.展示游戏布局

代码如下:

    // 程序测试时输出布局public static void ShowLayout(String[][] Layout) {int i, j;for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {System.out.print(Layout[i][j]);}System.out.println();}}

4.寻找炸弹人可达区域

游戏布局确定之后,炸弹人(在地图中标记为B)的初始位置也已确定,那么就从炸弹人的四周遍历,寻找可以放炸弹的区域(在地图中标记为0)。这地方我就是简单的递归遍历,外加了标记数组Flag[][[],标记是否遍历过,减少运算。代码如下,也是放在Main类中:

    public static void FindWay(String[][] Layout, int x, int y) {// 从炸弹人位置(x,y)开始找可达区域,找到之后记录下来Area[x][y] = 1;// 初始位置必定可达Flag[x][y] = 1;// 访问位置为1if (y - 1 >= 0 && Flag[x][y - 1] != 1 && Layout[x][y - 1].equals("0")) {// 没过界,未访问,可达,当前位置向左找FindWay(Layout, x, y - 1);}if (y + 1 < n && Flag[x][y + 1] != 1 && Layout[x][y + 1].equals("0")) {// 没过界,未访问,可达,当前位置向右找FindWay(Layout, x, y + 1);}if (x - 1 >= 0 && Flag[x - 1][y] != 1 && Layout[x - 1][y].equals("0")) {// 没过界,未访问,可达,当前位置向上找FindWay(Layout, x - 1, y);}if (x + 1 < n && Flag[x + 1][y] != 1 && Layout[x + 1][y].equals("0")) {// 没过界,未访问,可达,当前位置向下找FindWay(Layout, x + 1, y);}}

5. 放炸弹炸死敌人

代码如下(Main类中),逻辑很简单,就是向上下左右四个方向炸,注释很清楚就不解释了:

    // 爆炸public static void Destroy(String[][] Layout, int x, int y) {// 把炸弹放在(x,y)位置,然后将爆炸路径上的敌人杀死// 炸弹的上下左右四个方向搜寻敌人int center_x = x, center_y = y;// 暂存炸弹位置// 炸弹往上炸while (x >= 0 && !Layout[x][y].equals("W")) {// 没过界,没到墙if (Layout[x][y].equals("E")) {// 如果炸到了敌人,此时敌人坐标为(x,y),在敌人清单中找到此敌人for (Enemy enemy : EnemyList) {if (enemy.getX() == x && enemy.getY() == y) {enemy.setDestroyed(true);// 标记此敌人已被炸死}}}x--;// 继续往上炸}// 炸弹往下炸x = center_x;while (x < n && !Layout[x][y].equals("W")) {// 没过界,没到墙if (Layout[x][y].equals("E")) {// 如果炸到了敌人,此时敌人坐标为(x,y),在敌人清单中找到此敌人for (Enemy enemy : EnemyList) {if (enemy.getX() == x && enemy.getY() == y) {enemy.setDestroyed(true);// 标记此敌人已被炸死}}}x++;// 继续往下炸}// 炸弹往左炸x = center_x;while (y >= 0 && !Layout[x][y].equals("W")) {// 没过界,没到墙if (Layout[x][y].equals("E")) {// 如果炸到了敌人,此时敌人坐标为(x,y),在敌人清单中找到此敌人for (Enemy enemy : EnemyList) {if (enemy.getX() == x && enemy.getY() == y) {enemy.setDestroyed(true);// 标记此敌人已被炸死}}}y--;// 继续往左炸}// 炸弹往右炸y = center_y;while (y < n && !Layout[x][y].equals("W")) {// 没过界,没到墙if (Layout[x][y].equals("E")) {// 如果炸到了敌人,此时敌人坐标为(x,y),在敌人清单中找到此敌人for (Enemy enemy : EnemyList) {if (enemy.getX() == x && enemy.getY() == y) {enemy.setDestroyed(true);// 标记此敌人已被炸死}}}y++;// 继续往右炸}}

6.在可达区域放置两颗炸弹,并且统计最大杀敌数

这一部分用到了上一部分的方法,主要逻辑就是:遍历所有可达区域,先放第一颗炸弹,炸死敌人。再放第二颗炸弹,炸死敌人。最后统计杀敌数,获得最大杀敌数情况的两颗炸弹坐标以及杀敌数量。

这一部分是重复运算最多的部分,可以通过改进算法来减少运算,但是,我,没空。简单写写啦。代码如下(Main类中):

    public static void PutBomb(String[][] Layout) throws IOException, ClassNotFoundException {// 放第一颗炸弹for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (Area[i][j] == 1) {// 可达区域,放炸弹,放第一颗炸弹之前,初始化敌人清单EnemyList = DeepCopy(TempEnemyList_Start);Destroy(Layout, i, j);// 暂存第一个炸弹爆炸后的敌人清单List<Enemy> TempEnemyList_FirstBomb = DeepCopy(EnemyList);// 放第二颗炸弹for (int l = 0; l < n; l++) {for (int m = 0; m < n; m++) {if (l == i && m == j) {// 放过炸弹了continue;}if (Area[l][m] == 1) {// 如果可达区域Destroy(Layout, l, m);// 统计死亡敌人个数for (Enemy enemy : EnemyList) {if (enemy.isDestroyed())Count++;}// 记录最大情况,以及炸弹位置if (Count > Max_Count) {Max_Count = Count;x1_max = i;y1_max = j;x2_max = l;y2_max = m;}Count = 0;// 还原为第一次爆炸后敌人的清单EnemyList = DeepCopy(TempEnemyList_FirstBomb);}}}}}}}

7.Main类

上面的方法定义完成后,主类就没啥代码了,调用就行:

    public static void main(String[] args) throws IOException, ClassNotFoundException {// 随机生成游戏布局Layout = GameLayoutOutput();// 展示游戏布局ShowLayout(Layout);// 寻找炸弹人可达区域FindWay(Layout, x_BombMan, y_BombMan);// 获取敌人清单(敌人所在坐标、是否被摧毁)getEnemyList(Layout);// 暂存原始敌人清单TempEnemyList_Start = DeepCopy(EnemyList);// 放炸弹,并且获得所有情况下的最大杀敌数PutBomb(Layout);System.out.println("情况可能不唯一,但算法保证运算正确");System.out.println("1号炸弹位置:" + "(" + (x1_max + 1) + "," + (y1_max + 1) + ")");System.out.println("2号炸弹位置:" + "(" + (x2_max + 1) + "," + (y2_max + 1) + ")");System.out.println("合计灭敌数:" + Max_Count);}

至此,程序基本功能完成。

三、总程序代码

下面的内容就是上面代码的汇总,反正就俩类,挺简单的。上面没提到的变量定义在下面的代码中会展示:

1.Enemy类

package com.company;import java.io.Serializable;public class Enemy implements Serializable {private int x;// 敌人横坐标private int y;// 敌人纵坐标private boolean destroyed = false;// 是否被摧毁public void setX(int x) {this.x = x;}public void setY(int y) {this.y = y;}public void setDestroyed(boolean destroyed) {this.destroyed = destroyed;}public int getX() {return x;}public int getY() {return y;}public boolean isDestroyed() {return destroyed;}
}

2.Main类

package com.company;import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Main {private static int n = 10;// 布局为n方阵private static int num = 33;// 墙的数量、敌人数、空地数private static int x_BombMan, y_BombMan;// 炸弹人位置private static String[][] Layout = new String[n][n];// 布局转换private static int[][] Area = new int[n][n];// 可达区域布局private static int[][] Flag = new int[n][n];// 访问位数组private static List<Enemy> EnemyList = new ArrayList<>();// 敌人清单private static List<Enemy> TempEnemyList_Start;// 暂存敌人清单private static int x1_max = 0, y1_max = 0, x2_max = 0, y2_max = 0, Count = 0, Max_Count = 0;// 记录两颗炸弹的横纵坐标,以及最大杀敌数public static void main(String[] args) throws IOException, ClassNotFoundException {// 随机生成游戏布局Layout = GameLayoutOutput();// 展示游戏布局ShowLayout(Layout);// 寻找炸弹人可达区域FindWay(Layout, x_BombMan, y_BombMan);// 获取敌人清单(敌人所在坐标、是否被摧毁)getEnemyList(Layout);// 暂存原始敌人清单TempEnemyList_Start = DeepCopy(EnemyList);// 放炸弹,并且获得所有情况下的最大杀敌数PutBomb(Layout);System.out.println("情况可能不唯一,但算法保证运算正确");System.out.println("1号炸弹位置:" + "(" + (x1_max + 1) + "," + (y1_max + 1) + ")");System.out.println("2号炸弹位置:" + "(" + (x2_max + 1) + "," + (y2_max + 1) + ")");System.out.println("合计灭敌数:" + Max_Count);}// BombGame随机生成游戏地图public static String[][] GameLayoutOutput() {int count = 0;int x = 0, y = 0, i = 0, j = 0;String[][] Layout = new String[n][n];Random random = new Random();// 初始化,全是空地for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {Layout[i][j] = "0";}}// 随机生成1个炸弹人,5面墙,5个敌人,5个空位// 生成炸弹人位置x = random.nextInt(n);y = random.nextInt(n);Layout[x][y] = "B";x_BombMan = x;y_BombMan = y;// 生成墙while (count < num) {// 没放完墙x = random.nextInt(n);y = random.nextInt(n);if (!Layout[x][y].equals("B")) {// 如果不是炸弹人的位置Layout[x][y] = "W";count++;}}// 生成敌人count = 0;while (count < num) {// 没放完敌人x = random.nextInt(n);y = random.nextInt(n);if (!Layout[x][y].equals("B") && !Layout[x][y].equals("W")) {// 如果不是炸弹人的位置,也不是墙的位置Layout[x][y] = "E";count++;}}return Layout;}public static void FindWay(String[][] Layout, int x, int y) {// 从炸弹人位置(x,y)开始找可达区域,找到之后记录下来Area[x][y] = 1;// 初始位置必定可达Flag[x][y] = 1;// 访问位置为1if (y - 1 >= 0 && Flag[x][y - 1] != 1 && Layout[x][y - 1].equals("0")) {// 没过界,未访问,可达,当前位置向左找FindWay(Layout, x, y - 1);}if (y + 1 < n && Flag[x][y + 1] != 1 && Layout[x][y + 1].equals("0")) {// 没过界,未访问,可达,当前位置向右找FindWay(Layout, x, y + 1);}if (x - 1 >= 0 && Flag[x - 1][y] != 1 && Layout[x - 1][y].equals("0")) {// 没过界,未访问,可达,当前位置向上找FindWay(Layout, x - 1, y);}if (x + 1 < n && Flag[x + 1][y] != 1 && Layout[x + 1][y].equals("0")) {// 没过界,未访问,可达,当前位置向下找FindWay(Layout, x + 1, y);}}// 获取游戏地图中的敌人分布情况public static void getEnemyList(String[][] Layout) {int i, j;for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {if (Layout[i][j].equals("E")) {Enemy enemy = new Enemy();enemy.setX(i);enemy.setY(j);EnemyList.add(enemy);// 把敌人加入敌人清单,记录敌人的横坐标x和纵坐标y}}}}// 爆炸public static void Destroy(String[][] Layout, int x, int y) {// 把炸弹放在(x,y)位置,然后将爆炸路径上的敌人杀死// 炸弹的上下左右四个方向搜寻敌人int center_x = x, center_y = y;// 暂存炸弹位置// 炸弹往上炸while (x >= 0 && !Layout[x][y].equals("W")) {// 没过界,没到墙if (Layout[x][y].equals("E")) {// 如果炸到了敌人,此时敌人坐标为(x,y),在敌人清单中找到此敌人for (Enemy enemy : EnemyList) {if (enemy.getX() == x && enemy.getY() == y) {enemy.setDestroyed(true);// 标记此敌人已被炸死}}}x--;// 继续往上炸}// 炸弹往下炸x = center_x;while (x < n && !Layout[x][y].equals("W")) {// 没过界,没到墙if (Layout[x][y].equals("E")) {// 如果炸到了敌人,此时敌人坐标为(x,y),在敌人清单中找到此敌人for (Enemy enemy : EnemyList) {if (enemy.getX() == x && enemy.getY() == y) {enemy.setDestroyed(true);// 标记此敌人已被炸死}}}x++;// 继续往下炸}// 炸弹往左炸x = center_x;while (y >= 0 && !Layout[x][y].equals("W")) {// 没过界,没到墙if (Layout[x][y].equals("E")) {// 如果炸到了敌人,此时敌人坐标为(x,y),在敌人清单中找到此敌人for (Enemy enemy : EnemyList) {if (enemy.getX() == x && enemy.getY() == y) {enemy.setDestroyed(true);// 标记此敌人已被炸死}}}y--;// 继续往左炸}// 炸弹往右炸y = center_y;while (y < n && !Layout[x][y].equals("W")) {// 没过界,没到墙if (Layout[x][y].equals("E")) {// 如果炸到了敌人,此时敌人坐标为(x,y),在敌人清单中找到此敌人for (Enemy enemy : EnemyList) {if (enemy.getX() == x && enemy.getY() == y) {enemy.setDestroyed(true);// 标记此敌人已被炸死}}}y++;// 继续往右炸}}public static void PutBomb(String[][] Layout) throws IOException, ClassNotFoundException {// 放第一颗炸弹for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (Area[i][j] == 1) {// 可达区域,放炸弹,放第一颗炸弹之前,初始化敌人清单EnemyList = DeepCopy(TempEnemyList_Start);Destroy(Layout, i, j);// 暂存第一个炸弹爆炸后的敌人清单List<Enemy> TempEnemyList_FirstBomb = DeepCopy(EnemyList);// 放第二颗炸弹for (int l = 0; l < n; l++) {for (int m = 0; m < n; m++) {if (l == i && m == j) {// 放过炸弹了continue;}if (Area[l][m] == 1) {// 如果可达区域Destroy(Layout, l, m);// 统计死亡敌人个数for (Enemy enemy : EnemyList) {if (enemy.isDestroyed())Count++;}// 记录最大情况,以及炸弹位置if (Count > Max_Count) {Max_Count = Count;x1_max = i;y1_max = j;x2_max = l;y2_max = m;}Count = 0;// 还原为第一次爆炸后敌人的清单EnemyList = DeepCopy(TempEnemyList_FirstBomb);}}}}}}}// List深复制public static <T> List<T> DeepCopy(List<T> List) throws IOException, ClassNotFoundException {ByteArrayOutputStream ByteOut = new ByteArrayOutputStream();ObjectOutputStream Out = new ObjectOutputStream(ByteOut);Out.writeObject(List);ByteArrayInputStream ByteIn = new ByteArrayInputStream(ByteOut.toByteArray());ObjectInputStream In = new ObjectInputStream(ByteIn);@SuppressWarnings("unchecked")List<T> Temp = (List<T>) In.readObject();return Temp;}// 程序测试时输出布局public static void ShowLayout(String[][] Layout) {int i, j;for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {System.out.print(Layout[i][j]);}System.out.println();}}
}

3.运行结果


注意

在随机生成的游戏地图中,如果炸弹人没位置可走(周围都是墙或者敌人),或者只能放一颗炸弹,没有多余的空位,程序输出最大杀敌数为0。

网易实习笔试题——炸弹人编程相关推荐

  1. 育碧Web实习笔试题分享

    育碧的Web实习笔试题分享 笔试题目一共有20道,主要有选择题,简答题以及编程题,但是大部分都是简答题,题干是全英语的,但是大致题意还是能够读懂.考查知识大体涉及JavaScript.HTTP.CSS ...

  2. 2021.4.11 字节跳动实习笔试题---情报解密

    2021.4.11 字节跳动实习笔试题-情报解密 题目内容 题目内容: 给你一个字符串,该字符串中有数字,字母(字母只有大写字母)以及一些其他的字符(例如:%,.等),如果首字母为字母或者数字的话,就 ...

  3. 2014.3.29阿里巴巴暑期实习笔试题分析

    參考:http://blog.csdn.net/iloveyoujelly/article/details/22941531 以下中的[分析]是我给出的. 2014.3.29阿里巴巴暑期实习笔试题分析 ...

  4. C语言单链表实现FCFS算法,2014腾讯实习笔试题

    2014腾讯实习笔试题 1. 关于二叉树,下面说法正确的是() A. 对于N个节点的二叉树,其高度为nlog2n; B. 一个具有1025个节点的二叉树,其高度范围在11~1025之间 C. 二叉树的 ...

  5. 招商银行信用卡2019届实习笔试题

    招商银行信用卡2019届实习笔试题 题目表述:如图 思路:有向图中找回环.(具体方法和原理可以参考相关博客)同时标记那些指向回环的顶点.全部的顶点去掉被标记的顶点,输出就是答案了.完全按照题目中的提示 ...

  6. 2017网易前端笔试题总结

    整理了一下2017网易前端笔试题,附上了自己的答案,仅供参考,欢迎讨论和交流.如果有什么不对的地方,欢迎指正. 题目整理(不含答案) 网盘分享: 链接: https://pan.baidu.com/s ...

  7. 网易python笔试题_python 饥饿的小易(网易笔试题)

    本周早些时候,学弟给我发了一道网易的笔试题,饥饿的小易,感觉有点意思-分享给大家 题目描述: 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前 ...

  8. 2022暑期实习笔试题总结(网易,华为,360,美团)

    暑期投的比较晚,总结一下目前做过的一些笔试题 网易0327 题目:传送门 解析:传送门好像没有第三题 总结: 第一题不难,想的比较复杂,看到很多人说枚举就可以做,本人非要在做题的时候想一个" ...

  9. 前端开发实习笔试题(简答题)

    目录 1.说说你知道Javascript的内存回收机制 2.简单介绍一下Promise,它解决了什么问题? 3.position : absolute和float属性的异同 4.Cookie和Sess ...

最新文章

  1. 探索JAVA并发 - 悲观锁和乐观锁
  2. Html与Css关联到一起
  3. 一个请求方法是一个线程吗?不是!
  4. javamac系统通过pid获取进程名称_线上环境 Linux 系统调用追踪
  5. 【杂谈】您想要的docker环境来了!
  6. 阐述:SIP协议是什么
  7. lodash 数组元素查找 findIndex
  8. Spark机器学习之协同过滤算法
  9. 细说分布式Redis架构设计和那些踩过的坑
  10. Vensim模拟结果vdf数据文件转化为可读文本文件
  11. ctfmon是什么启动项_启动项里找不到ctfmon
  12. 小米笔记本PRO(双系统)黑果体验
  13. u盘中毒文件为html文档,u盘中毒文件被隐藏了?教你如何快速恢复隐藏文件
  14. 30句瞬间使你清醒的话,别再假装糊涂下去了!
  15. 2021斯坦福大学计算机系完整课程列表
  16. 【差分约束】SCOI2011糖果
  17. buck电路上下管_分时供电全桥Buck型双输入直流变换器
  18. 唐伯虎啊.......哎~~
  19. Maben 编译 jenjins配置
  20. rsync远程同步+inotify监控

热门文章

  1. ※ 冯·诺依曼体系结构模拟
  2. python中判断一个数是不是质数
  3. CRM系统的功能有哪些?
  4. 斯坦福计算机科学研究生,申请斯坦福计算机硕士要求有什么?
  5. 【K210学习基于MaixPy】FPIOA现场可编程IO阵列的理解与相关函数运用
  6. 如何理解三维曲面的法线向量公式?
  7. matlab产生带通白噪声,理想白噪声和带限白噪声的产生与分析
  8. PPPOE和DCHP获得IP地址的方式
  9. 零基础开发小程序第四课-查看功能开发
  10. 在Windows11上安装虚拟机Hyper-V