华为机试真题 Java 实现学生方阵
Posted MISAYAONE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试真题 Java 实现学生方阵相关的知识,希望对你有一定的参考价值。
目录
题目
学校组织活动,将学生排成一个矩形方阵。
请在矩形方阵中找到最大的位置相连的男生数量。
这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。
注:学生个数不会超过10000
输入描述输入的第一行为矩阵的行数和列数,接下来的n行为矩阵元素,元素间用”,”分隔。
输出描述输出一个整数,表示矩阵中最长的位置相连的男生个数。
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例输入
3,4
F,M,M,F
F,M,M,F
F,F,F,M
输出
3
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
1,2
M,M
输出
2
示例3 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
2,1
M
F
输出
1
思路
1:下一个格子跟上一个格子有关系,横着、竖着、对角线、反对角线,我们分别模拟这四种情况即可
考点
1:想象能力
Code
import java.util.Scanner;
import java.util.*;
public class Main
public static void main(String[] args)
//处理输入
Scanner in = new Scanner(System.in);
String[] input_str = in.nextLine().split(",");
int m = Integer.parseInt(input_str[0]);
int n = Integer.parseInt(input_str[1]);
//构造学生矩阵
String[][] matrix = new String[m][n];
for (int i = 0; i < m; i++)
String[] s1 = in.nextLine().split(",");
for (int j = 0; j < n; j++)
matrix[i][j] = s1[j];
//逐个元素判定即可 O(n^2)复杂度
List<Integer> list = new ArrayList<>();
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (matrix[i][j].equals("M"))
getMaxBoyCount(matrix, i, j, list);
Collections.sort(list);
System.out.println(list.get(list.size() - 1));
public static void getMaxBoyCount(String[][] matrix, int i, int j, List<Integer> list)
int len = 1;
int a = 0, b = 0;
int m = matrix.length, n = matrix[0].length;
if (j < n) // 从左往右
a = i;
b = j;
while (b < n - 1 && matrix[a][++b].equals("M"))
len++;
list.add(len);
len = 1;
if (i < m) // 从上往下
a = i;
b = j;
while (a < m - 1 && matrix[++a][b].equals("M"))
len++;
list.add(len);
len = 1;
if (i < m && j < n) // 对角线
a = i;
b = j;
while ((a < m - 1 && b < n - 1) && matrix[++a][++b].equals("M"))
len++;
list.add(len);
len = 1;
if (i >= 0 && j < n) // 从左往右
a = i;
b = j;
while (( a > 0 && b < n - 1) && matrix[--a][++b].equals("M"))
len++;
list.add(len);
以上是关于华为机试真题 Java 实现学生方阵的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试真题Java实现新学校选址真题+解题思路+代码(2022&2023)
华为机试真题 Java 实现新学校选址2022.11 Q4 新题