数据结构题目记录

题目

编写一个函数,对给定的一个m*n的矩阵A,统计这个矩阵中具有以下特征的元素个数,该元素既是所在行的最大值(最小值),又是所在列的最大值(最小值),打印出来这些特殊元素以及其坐标

函数

// An highlighted block
void sort(int A[m][n])//输出格式:先输出所在行列是最小值的元素:先输出这个特殊值,在输出它的位置,然后换行;在输出是最大值的元素
{
	//造两个数组min[m],max[m],存储每一行的最小值和最大值,并记录其位置坐标
	Location min[m],max[m];
	//初始化
	for(int i=0;i<m;++i)
	{
		min[i].val=A[i][0];
		max[i].val=A[i][0];
	}
	//找到每一行的特殊值并记录其位置,本题所求特殊值只能从它们之间来
	for(int i=0;i<m;++i)
	{
		for(int j=0;j<n;++j)
		{
			if(A[i][j]<min[i].val)
			{
				min[i].val=A[i][j];
				min[i].column=j;
			}
			if(A[i][j]>max[i].val)
			{
				max[i].val=A[i][j];
				max[i].column=j;
			}
		}
	}
	cout<<"maxVlaue"<<" "<<"locate"<<endl;
	//设置最大值最小值计数器
	int mincount=0,maxcount=0;
	//最大特殊值
	for(int i=0;i<m;++i,maxcount=0)//m对特殊值值遍历,找合格的
	{
		for(int j=0;j<m;++j)//m行
		{
			if(max[i].val>=A[j][max[i].column])
			{
				++maxcount;
			}
		}
		if(maxcount==m)
		{
			cout<<max[i].val<<" ("<<i<<","<<max[i].column<<")"<<endl;
		}
	}
	cout<<endl;
	cout<<"minValue"<<" "<<"locate"<<endl;
	//最小特殊值
	for(int i=0;i<m;++i,mincount=0)//m对特殊值值遍历,找合格的
	{
		for(int j=0;j<m;++j)//m行
		{
			if(min[i].val<=A[j][min[i].column])
			{
				++mincount;
			}
		}
		if(mincount==m)
		{
			cout<<min[i].val<<" ("<<i<<","<<min[i].column<<")"<<endl;
		}
	}
}

完整源码

#include<iostream>

using namespace std;
#define m 3
#define n 4
void sort(int A[m][n]);
typedef struct Location{
	int val;
	int column;//只记录列号即可
}Location;

int main()
{
	int A[3][4]={{1,2,3,98},{0,2,4,9},{1,2,343,55}};
	sort(A);
	return 0;
}

void sort(int A[m][n])//输出格式:先输出所在行列是最小值的元素:先输出这个特殊值,在输出它的位置,然后换行;在输出是最大值的元素
{
	//造两个数组min[m],max[m],存储每一行的最小值和最大值,并记录其位置坐标
	Location min[m],max[m];
	//初始化
	for(int i=0;i<m;++i)
	{
		min[i].val=A[i][0];
		max[i].val=A[i][0];
	}
	//找到每一行的特殊值并记录其位置,本题所求特殊值只能从它们之间来
	for(int i=0;i<m;++i)
	{
		for(int j=0;j<n;++j)
		{
			if(A[i][j]<min[i].val)
			{
				min[i].val=A[i][j];
				min[i].column=j;
			}
			if(A[i][j]>max[i].val)
			{
				max[i].val=A[i][j];
				max[i].column=j;
			}
		}
	}
	cout<<"maxVlaue"<<" "<<"locate"<<endl;
	//设置最大值最小值计数器
	int mincount=0,maxcount=0;
	//最大特殊值
	for(int i=0;i<m;++i,maxcount=0)//m对特殊值值遍历,找合格的
	{
		for(int j=0;j<m;++j)//m行
		{
			if(max[i].val>=A[j][max[i].column])
			{
				++maxcount;
			}
		}
		if(maxcount==m)
		{
			cout<<max[i].val<<" ("<<i<<","<<max[i].column<<")"<<endl;
		}
	}
	cout<<endl;
	cout<<"minValue"<<" "<<"locate"<<endl;
	//最小特殊值
	for(int i=0;i<m;++i,mincount=0)//m对特殊值值遍历,找合格的
	{
		for(int j=0;j<m;++j)//m行
		{
			if(min[i].val<=A[j][min[i].column])
			{
				++mincount;
			}
		}
		if(mincount==m)
		{
			cout<<min[i].val<<" ("<<i<<","<<min[i].column<<")"<<endl;
		}
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值