斜线最大最小值

题目描述

求如图所示一个上三角矩阵中每一条斜线中的最大元素(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);
        	
        	 
        	
            }
    }
    }
发布了84 篇原创文章 · 获赞 81 · 访问量 8913

猜你喜欢

转载自blog.csdn.net/qq_45353823/article/details/105466113
今日推荐