谭浩强C++课后习题29——矩阵中交换元素
题目描述:将一个5*5的矩阵中的最大的元素放在中心,4个角分别放4个最小的元素(按从左到右,从上到下顺序依次从小到大存放),编写一个函数来实现。用main函数调用。
#include<iostream>
using namespace std;
const int n = 5;
void Move(int matrix[][n]) {
int temp;
int maxi = 0, maxj = 0, mini = 0, minj = 0;
for (int i = 0;i < n;i++)
for (int j = 0;j < n;j++)
if (matrix[i][j] > matrix[maxi][maxj]) {
maxi = i;
maxj = j;
}
temp = matrix[n / 2][n / 2];
matrix[n / 2][n / 2] = matrix[maxi][maxj];
matrix[maxi][maxj] = temp;
for (int i = 0;i < n;i++)
for (int j = 0;j < n;j++)
if (matrix[i][j] < matrix[mini][minj]) {
mini = i;
minj = j;
}
temp = matrix[0][0];
matrix[0][0] = matrix[mini][minj];
matrix[mini][minj] = temp;
mini = 0;minj = 1;
for (int i = 0;i < n;i++)
for (int j = 0;j < n;j++)
if ((matrix[i][j] < matrix[mini][minj])&&!(i==0&&j==0)) {
mini = i;
minj = j;
}
temp = matrix[0][n-1];
matrix[0][n-1] = matrix[mini][minj];
matrix[mini][minj] = temp;
mini = 0;minj = 1;
for (int i = 0;i < n;i++)
for (int j = 0;j < n;j++)
if ((matrix[i][j] < matrix[mini][minj]) && !(i == 0 && j == 0)&&!(i==0&&j==n-1)) {
mini = i;
minj = j;
}
temp = matrix[n-1][0];
matrix[n-1][0] = matrix[mini][minj];
matrix[mini][minj] = temp;
mini = 0;minj = 1;
for (int i = 0;i < n;i++)
for (int j = 0;j < n;j++)
if ((matrix[i][j] < matrix[mini][minj]) && !(i == 0 && j == 0) && !(i == 0 && j == n - 1)&&!(i==n-1&&j==0)) {
mini = i;
minj = j;
}
temp = matrix[n - 1][n-1];
matrix[n - 1][n-1] = matrix[mini][minj];
matrix[mini][minj] = temp;
}
int main() {
int matrix[n][n];
cout << "输入矩阵:" << endl;
for (int i = 0;i < n;i++)
for (int j = 0;j < n;j++)
cin >> matrix[i][j];
Move(matrix);
cout << "新矩阵:" << endl;
for (int i = 0;i < n;i++) {
for (int j = 0;j < n;j++)
cout << matrix[i][j] << '\t';
cout << endl;
}
return 0;
}
运行测试结果: