题目描述
求如图所示一个上三角矩阵中每一条斜线中的最大元素(L)和最小元素(S)。
输入
每组输入包括两部分,一部分为数字n,表示三角矩阵的行数。
第二部分即为三角矩阵。
输出
每一个对角线输出一行,每行包括Lx=Max, Sx=Min,其中x为斜线序号(序号从1开始),Max为该斜线上的最大值,Min为该斜线上的最小值。
样例输入 Copy
6
1 3 5 7 11 20
0 6 8 2 3 13
0 0 7 4 8 9
0 0 0 18 3 10
0 0 0 0 12 6
0 0 0 0 0 15
样例输出 Copy
L1=18, S1=1
L2=8, S2=3
L3=10, S3=2
L4=9, S4=3
L5=13, S5=11
L6=20, S6=20
代码:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void MaxMultiply(int a[][],int row,int col) {
int i=row;//行
int j=col;//列
for(int k=0;k<=j-1;k++) {
int p=0;//行数;
int m=k;每当一条斜线比较完之后,k值应恢复到原值
int s=Integer.MAX_VALUE;
int g=Integer.MIN_VALUE;
int max[]=new int[row];
int min[]=new int[row];
for(int q=0;q<row;q++) {
max[q]=g;//里面存最小值,便于取最大值,细品
min[q]=s;//里面存最大值,便于取最小值,细品
}
if(m==j-1) {max[m]=min[m]=a[0][m];}//当到达最后一个元素,最大值和最小值就一样
while(p>=0 && p<=i-1 && k>=0 && k<=j-1){
max[m] = max[m]<=a[p][k]?a[p][k]:max[m];//取最大的一个数
min[m] = min[m]>=a[p][k]?a[p][k]:min[m]; //取最小的一个数
p++;k++;
}
System.out.print("L"+(m+1)+"="+max[m]+", "+"S"+(m+1)+"="+min[m]);
System.out.println();
k=m;//k要回到原来的位置,不然会得不到想要的结果;自己试试
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNext()) {
int n=cin.nextInt();
int arr[][]=new int[n][n];
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
arr[i][j]=cin.nextInt();
}
}
MaxMultiply(arr,arr.length,arr[0].length);
}
}
}