使用反向对角线

时间:2017-03-06 14:42:54

标签: c++ arrays multidimensional-array swap

我正在尝试将最小行值与反向对角线交换。我设法打印出每行最小值,但我的交换失败了。也许你可以给我一些提示。

    for (int i = 0; i < n; i++)
     {
        int min = mas[i][0];
         for (int j = 1; j < m; j++)
         {
             if (mas[i][j] < min)
             {
                min = mas[i][j];
             }
             for(int k=n-1;k>0;k--){
                for(int h = m-1; h>0;h--){

                min = mas[i][j];
                mas[i][j]=mas[k][h];
                mas[k][h]=min;
             }
             cout << "New Matrix\n";
            for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
            cout << mas[i][j] << " ";
        }
             }
         }
    }        
    system("pause");
    return EXIT_SUCCESS;
}

这是for的最小值,后来我又为交换值添加了for

我的结果: 我打印出3个矩阵,没有一个正确交换价值。我想这是因为for for for cycle?

带有2d数组的文件:

1 2 5 // row min 1, reverse diagonal 5
2 8 9 // row min 2, reverse diagonal 8
5 9 10 // row min 5, revese diagonal 5

我期望输出什么:

5 2 1 // 5 diagonal swap with min = 1
8 2 9 // 8 diagonal swap with min = 2
5 9 10 // 5 diagonal no swap because 5 is row minimum

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么“反向对角线”只能存在于方阵中。因此,输入两个值nm来处理方形矩阵是没有意义的。

如果要考虑问题中显示的3 x 3矩阵的示例并使用循环而不是标准函数std::max_elementstd::swap,那么转换矩阵的代码可以看起来如下在演示程序中显示的方式

#include <iostream>
#include <iomanip>

int main()
{
    const size_t N = 3;
    int a[N][N] =
    {
        { 1, 2, 5 },
        { 2, 8, 9 },
        { 5, 9, 10 }
    };

    for (size_t i = 0; i < N; i++)
    {
        for (size_t j = 0; j < N; j++)
        {
            std::cout << std::setw(2) << a[i][j] << ' ';
        }
        std::cout << '\n';
    }

    std::cout << std::endl;

    for (size_t i = 0; i < N; i++)
    {
        size_t min = 0;
        for (size_t j = 1; j < N; j++)
        {
            if (a[i][j] < a[i][min]) min = j;
        }

        if ( min != N - i - 1 )
        {
            int tmp = a[i][min];
            a[i][min] = a[i][N - i - 1];
            a[i][N - i - 1] = tmp;
        }
    }

    for (size_t i = 0; i < N; i++)
    {
        for (size_t j = 0; j < N; j++)
        {
            std::cout << std::setw(2) << a[i][j] << ' ';
        }
        std::cout << '\n';
    }

    std::cout << std::endl;
}

程序输出

 1  2  5
 2  8  9
 5  9 10

 5  2  1
 8  2  9
 5  9 10