矩阵游戏
题目描述:
小明最近沉迷于一个矩阵游戏,游戏规则是:给定一个数字矩阵。该矩阵行和列相同,对于第i行,你需要将第i行的最小值(若出现相同的,选择列号较小的)和第i列的最大值(若出现相同的,选择行号较小的)交换,然后将第i行的数从小到大排序。要求输出最后的矩阵。
输入格式:
第1行为一个整数n(不超过100),表示矩阵的行列数。
接下来n行,每行n个整数。
输出格式:
n*n的矩阵。
约定:
1<=n<=100
这题你稍等一下,马上代码该给你
题目不是很理解,第2行最小值1,最大值6,交换,为什么最后6还在第三行
不知道你这个问题是否已经解决, 如果还没有解决的话:问题描述:
小明最近沉迷于一个矩阵游戏,游戏规则是:给定一个数字矩阵。该矩阵行和列相同,对于第i行,你需要将第i行的最小值(若出现相同的,选择列号较小的)和第i列的最大值(若出现相同的,选择行号较小的)交换,然后将第i行的数从小到大排序。要求输出最后的矩阵。
输入格式: - 第1行为一个整数n(不超过100),表示矩阵的行列数。 - 接下来n行,每行n个整数。
输出格式: - n*n的矩阵。
约定: - 1<=n<=100
解决方案:
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> readMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}
return matrix;
}
pair<int, int> findMinMax(const vector<vector<int>>& matrix, int row) {
int minValue = matrix[row][0];
int minIndex = 0;
int maxValue = matrix[0][row];
int maxIndex = 0;
for (int i = 1; i < matrix.size(); i++) {
if (matrix[row][i] < minValue) {
minValue = matrix[row][i];
minIndex = i;
}
if (matrix[i][row] > maxValue) {
maxValue = matrix[i][row];
maxIndex = i;
}
}
return make_pair(minIndex, maxIndex);
}
void swapValues(vector<vector<int>>& matrix, int row, int minIndex, int maxIndex) {
int temp = matrix[row][minIndex];
matrix[row][minIndex] = matrix[maxIndex][row];
matrix[maxIndex][row] = temp;
}
void sortRow(vector<int>& row) {
sort(row.begin(), row.end());
}
vector<vector<int>> optimizeMatrixGame(int n) {
vector<vector<int>> matrix = readMatrix(n);
for (int i = 0; i < n; i++) {
pair<int, int> minMax = findMinMax(matrix, i);
swapValues(matrix, i, minMax.first, minMax.second);
sortRow(matrix[i]);
}
return matrix;
}
int main() {
int n;
cin >> n;
vector<vector<int>> result = optimizeMatrixGame(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
}
通过以上步骤,我们可以优化并解决题目所描述的问题。