XJOI 2 级 1 段 c++ 矩阵游戏

矩阵游戏

题目描述:

小明最近沉迷于一个矩阵游戏,游戏规则是:给定一个数字矩阵。该矩阵行和列相同,对于第i行,你需要将第i行的最小值(若出现相同的,选择列号较小的)和第i列的最大值(若出现相同的,选择行号较小的)交换,然后将第i行的数从小到大排序。要求输出最后的矩阵。

输入格式:

第1行为一个整数n(不超过100),表示矩阵的行列数。

接下来n行,每行n个整数。

输出格式:

n*n的矩阵。
约定:

1<=n<=100

img

这题你稍等一下,马上代码该给你

题目不是很理解,第2行最小值1,最大值6,交换,为什么最后6还在第三行

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7589640
  • 以下回答来自chatgpt:

    问题描述:

    小明最近沉迷于一个矩阵游戏,游戏规则是:给定一个数字矩阵。该矩阵行和列相同,对于第i行,你需要将第i行的最小值(若出现相同的,选择列号较小的)和第i列的最大值(若出现相同的,选择行号较小的)交换,然后将第i行的数从小到大排序。要求输出最后的矩阵。

    输入格式: - 第1行为一个整数n(不超过100),表示矩阵的行列数。 - 接下来n行,每行n个整数。

    输出格式: - n*n的矩阵。

    约定: - 1<=n<=100

    解决方案:

    1. 首先,我们需要读取输入数据,得到一个 n * n 的矩阵。
    #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;
    }
    
    1. 接下来,我们需要找到每一行的最小值和每一列的最大值。
    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);
    }
    
    1. 然后,我们交换每一行的最小值和对应列的最大值。
    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;
    }
    
    1. 最后,我们对每一行进行排序。
    void sortRow(vector<int>& row) {
        sort(row.begin(), row.end());
    }
    
    1. 综合以上步骤,我们可以实现解决方案的主要函数。
    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;
    }
    
    1. 最后,我们可以在主函数中调用该函数并输出结果。
    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;
    }
    

    通过以上步骤,我们可以优化并解决题目所描述的问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^