已知一个5×5矩阵,用函数实现:(1)找出该矩阵中的鞍点,“鞍点”指的是一个位置,该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。(2)将矩阵中最大的元素放在中心,四个角分别放四个最小的元素。用C语言写。
时间: 2023-05-22 16:04:22 浏览: 72
以下是用C语言实现的代码:
#include <stdio.h>
#define ROW 5
#define COL 5
void findSaddlePoint(int matrix[ROW][COL]);
void sort(int arr[], int n);
int main() {
int m[ROW][COL] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25}};
findSaddlePoint(m);
return 0;
}
void findSaddlePoint(int matrix[ROW][COL]) {
int max = matrix[0][0], min = matrix[0][0], max_row = 0, min_col = 0;
int i, j;
// 找出最大值和对应的行
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (matrix[i][j] > max) {
max = matrix[i][j];
max_row = i;
}
}
}
// 检查该行是否有最小值
for (j = 0; j < COL; j++) {
if (matrix[max_row][j] < min) {
min = matrix[max_row][j];
min_col = j;
}
}
// 检查该列上是否有最大值,如果存在则该点为鞍点
for (i = 0; i < ROW; i++) {
if (matrix[i][min_col] > max) {
printf("鞍点为(%d,%d): %d\n", i, min_col, matrix[i][min_col]);
return;
}
}
printf("该矩阵没有鞍点。\n");
// 找出最小的四个元素
int arr[ROW * COL];
int k = 0;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
arr[k++] = matrix[i][j];
}
}
sort(arr, ROW * COL); // 排序
// 将最大值放在中心,四个角分别放四个最小的元素
matrix[2][2] = max;
matrix[0][0] = arr[0];
matrix[0][4] = arr[1];
matrix[4][0] = arr[2];
matrix[4][4] = arr[3];
printf("调整后的矩阵为:\n");
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
void sort(int arr[], int n) {
int i, j;
for (i = 0; i < n-1; i++) {
for (j=0; j<n-1-i; j++) {
if (arr[j] > arr[j+1]) {
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}