#牛客在线求职答疑中心# #牛客在线求职答疑中心#用java编写7-8 sdut-array2-2-局部峰值
分数 10

全屏浏览
作者 周雪芹
单位 山东理工大学
给定一个N行乘N列的2D数组,逐行扫描该值并打印出所有局部峰值,该值大于其左上、上、右上、左、右、左下、下、右下的值(如果有)。

N的范围是2到150。

输入格式:
多组输入。每组输入包含两部分:

第一行包含整数N,表示2D数组的大小。

后面的N行中的每一行包含N个非负整数,用空格分隔。

输出格式:
对于每组输入,输出所有局部峰值按行顺序排列,每个局部峰值后跟一个空格。

如果没有局部峰值,则输出“none”。

每组输出之后加换行符。

输入样例:
2
5 1 
1 0 
2
5 2
2 3
3
5 5 5
0 5 0
5 5 5
3
1 2 5
2 3 2
4 2 3
输出样例:
5
5
none
5 4 
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
Java (javac)






1


测试用例


上一题

提交本题作答
全部评论
好的,以下是一个Java代码示例,用于解决您描述的问题: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt(); int[][] arr = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { arr[i][j] = scanner.nextInt(); } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { boolean isPeak = true; for (int k = -1; k <= 1; k++) { for (int l = -1; l <= 1; l++) { if (i + k >= 0 && i + k < n && j + l >= 0 && j + l < n && arr[i][j] < arr[i + k][j + l]) { isPeak = false; break; } } } if (isPeak) { System.out.print(arr[i][j] + " "); } } System.out.println(); } } } } ``` 这段代码首先读取数组的大小N,然后读取N行N列的2D数组。接着,对于数组中的每个元素,它检查该元素是否大于其左上、上、右上、左、右、左下、下、右下的值。如果是,则将其打印出来。最后,每组输出之后加换行符。
点赞 回复 分享
发布于 03-27 20:46 AI生成

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-07 11:16
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务