求矩阵(方阵)的鞍点

题目;emm....还是上图吧

输出样例:

代码图:

#include<stdio.h>  
int main()
{ 
	int max, min;
	int n;
	int a[6][6];
	int i, j; //i 表示行,j表示列 
	int k, w;
	int flag = 0;
	printf("请输入一个整数n:");
	scanf_s("%d",&n);
	for ( i = 0; i < n; i++)
	{
		for ( j = 0; j < n; j++)
		{	
			scanf_s("%d",&a[i][j]);

			printf("%d\t",a[i][j]);
		}
		printf("\n");
	}
	for (i = 0; i < n; i++)
	{
		max = a[i][0];       //每行第一个数设为最大值
		for (j = 0; j < n; j++)     //行
		{
			if (max < a[i][j])
			{
				max = a[i][j];
				
			}
		}
		for (w= 0; w < n; w++)
		{
			min = a[0][w];       //每列第一个数设为最小值
			for (k = 0; k < n; k++)
			{
				if (min > a[k][w])
				{
					min = a[k][w];
				
				}
			}
			if (a[i][w] == min && a[i][w] == max)
			{
				printf("%d %d", i, w);
				flag++;
			}
		}
	}
	if (flag == 0)
		printf("NONE");
	return 0;
}

 

写这个题,太难了,花数 n 小时,重点吧!!!

### C++ 实现矩阵鞍点算法 以下是基于提供的引用内容以及专业知识编写的 C++ 程序,用于查找 n 阶方阵中的鞍点。 #### 什么是鞍点? 在一个 n×n 方阵中,如果某个元素在其所在行是最小值,在其所在列是最大值,则该元素称为鞍点。需要注意的是,一个矩阵可能有多个鞍点或者没有鞍点[^1]。 #### C++ 实现代码 以下是一个完整的 C++ 程序,能够读取用户输入的矩阵并找出其中所有的鞍点: ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cout << "请输入矩阵的阶数 n:" << endl; cin >> n; vector<vector<int>> matrix(n, vector<int>(n)); cout << "请输入 " << n << "x" << n << " 的矩阵:" << endl; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cin >> matrix[i][j]; } } // 存储每行最小值及其对应的列索引 vector<pair<int, int>> rowMinValues(n); for (int i = 0; i < n; ++i) { int minValue = matrix[i][0]; int minIndex = 0; for (int j = 1; j < n; ++j) { if (matrix[i][j] < minValue) { minValue = matrix[i][j]; minIndex = j; } } rowMinValues[i] = {minValue, minIndex}; } bool hasSaddlePoint = false; cout << "鞍点如下:" << endl; for (int i = 0; i < n; ++i) { int colMax = matrix[0][rowMinValues[i].second]; for (int k = 1; k < n; ++k) { if (matrix[k][rowMinValues[i].second] > colMax) { colMax = matrix[k][rowMinValues[i].second]; } } if (colMax == rowMinValues[i].first) { cout << "位置 (" << i << ", " << rowMinValues[i].second << ") 值为: " << rowMinValues[i].first << endl; hasSaddlePoint = true; } } if (!hasSaddlePoint) { cout << "未找到任何鞍点!" << endl; } return 0; } ``` #### 解析 上述代码通过两步完成鞍点检测: 1. **找出行最小值**:对于每一行,记录下当前行的最小值及其所在的列号。 2. **验证列最大值**:检查这些行最小值是否也是对应列的最大值。如果是,则找到了鞍点[^4]。 #### 特殊情况处理 - 如果矩阵中不存在鞍点,程序会输出提示信息 “未找到任何鞍点!”。 - 对于全矩阵数值相同的情况(即所有元素均为鞍点),此代码同样适用,并能正确识别每一个鞍点[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小雨527

你的鼓励是我的最大的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值