HNUCM 2022年春季学期《算法分析与设计》练习9斜线最大最小值

27 篇文章 2 订阅
该博客主要介绍了如何利用C++编程解决一个关于上三角矩阵的问题,即找出每一条斜线上的最大值(L)和最小值(S)。博主提出了一种使用vector存储斜线元素并进行排序的方法,以及另一种利用set自动排序的思路。通过这两种方法,可以有效地找到每条斜线上对应的L和S,并输出结果。
摘要由CSDN通过智能技术生成

题目描述

求如图所示一个上三角矩阵中每一条斜线中的最大元素(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
#include<bits/stdc++.h>
using namespace std;
int a[1005][1005];

bool cmp(int a,int b){//排序
	return a>b;
}
int main(){
	int n;
	while(cin>>n){
		vector<int>se[1005];//定义一个vector数组
	for(int i=1;i<=n;i++){
		int t=0;//注意	
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
			if(a[i][j]!=0){
				t++;//t最关键,就是判断这个a[i][j]应该放在哪个vector数组里面
				se[t].push_back(a[i][j]);
			}
			
		}
		}
		for(int i=1;i<=n;i++){
			if(se[i].size()!=1){//遍历,时间复杂度高
				sort(se[i].begin(),se[i].end(),cmp);
				 cout<<"L"<<i<<"="<<se[i][0]<<", S"<<i<<"="<<se[i][se[i].size()-1]<<endl;
			}
			else cout<<"L"<<i<<"="<<se[i][0]<<", S"<<i<<"="<<se[i][0]<<endl;
		}
	}
	return 0;
}

 推荐另一种思路,就是使用set集合,因为他会自动排序,只需要使用iterator遍历到第一个就是最小,最后就是最大

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H-rosy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值