【问题标题】:How to move largest number of matrix如何移动最大数量的矩阵
【发布时间】:2014-12-14 17:04:25
【问题描述】:

我需要将最大数量的随机生成矩阵移动到矩阵的右下角,但我不知道如何。有人可以帮忙吗。 这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, rows, columns;
    int **matrix;

    printf("write the number of rows\n");
    scanf("%d", &rows);
    printf("write the number of columns\n");
    scanf("%d", &columns);

    matrix = malloc(rows * sizeof *matrix);
    for (i = 0 ; i < rows ; i++)
    {
        matrix[i] = malloc(columns * sizeof(int));
        for (j = 0 ; j < columns ; j++)
            matrix[i][j] = rand() % 100;
    }

    for (i = 0 ; i < rows ; i++)
    {
        for (j = 0 ; j < columns ; j++)
            printf("%5d", matrix[i][j]);
        printf("\n");
    }

    for (i = 0 ; i < rows ; i++)
    free(matrix[i]);
    free(matrix);

    return 0;
}

【问题讨论】:

  • 你在矩阵中找到最大的数,然后用matrix[rows - 1][columns - 1]交换它。
  • 您的问题有点不明确。您是否需要将最大的数字与右下角的值交换?如果有多个位置的最大值相同,该怎么办?

标签: c matrix


【解决方案1】:

试试下面的

int max = matrix[0][0];

for (i = 0 ; i < rows ; i++)
{
    for (j = 0 ; j < columns ; j++)
    {
        if ( max < matrix[i][j] ) max = matrix[i][j];
    }
}

matrix[rows-1][columns-1] = max;

如果您需要将矩阵的右下元素与最大元素交换,则代码如下所示

int max_i = 0;
int max_j = 0;

for (i = 0 ; i < rows ; i++)
{
    for (j = 0 ; j < columns ; j++)
    {
        if ( matrix[max_i][max_j] < matrix[i][j] ) max_i = i, max_j = j;
    }
}

int tmp = matrix[rows-1][columns-1];
matrix[rows-1][columns-1] = matrix[max_i][max_j];
matrix[max_i][max_j] = tmp;

【讨论】:

  • @Mangiux 如果确实有帮助,那么将答案标记为这样。:)
【解决方案2】:

您可以通过这种方式生成具有请求特征的矩阵

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, rows, columns, largest, largestRow, largestColumn, swapValue;
    int **matrix;

    printf("write the number of rows\n");
    scanf("%d", &rows);
    printf("write the number of columns\n");
    scanf("%d", &columns);

    largest       = 0;
    largestRow    = 0;
    largestColumn = 0;
    matrix        = malloc(rows * sizeof *matrix);
    if (matrix == NULL)
        return -1;
    for (i = 0 ; i < rows ; i++)
    {
        matrix[i] = malloc(columns * sizeof(int));
        if (matrix[i] == NULL)
        {
            int k;

            for (k = i - 1 ; k >= 0 ; k--)
                free(matrix[k]);
            free(matrix);

            return -1;
        }

        for (j = 0 ; j < columns ; j++)
        {
            matrix[i][j] = rand() % 100;
            if (matrix[i][j] > largest)
            {
                largestRow    = i;
                largestColumn = j;
                largest       = matrix[i][j];
            }
        }
    }
    swapValue                         = matrix[rows - 1][columns - 1];
    matrix[rows - 1][columns - 1]     = largest;
    matrix[largestRow][largestColumn] = swapValue;

    for (i = 0 ; i < rows ; i++)
    {
        for (j = 0 ; j < columns ; j++)
            printf("%5d", matrix[i][j]);
        printf("\n");
    }

    for (i = 0 ; i < rows ; i++)
        free(matrix[i]);
    free(matrix);

    return 0;
}

【讨论】:

  • 关于唯一可以说是错误的是初始化。你不初始化largestRowlargestColumn;这是个大问题。使用largest = 0.0; 也很可疑——最好使用matrix[0][0]matrix[rows-1][columns-1],适当地初始化largestRowlargestColumn 的值。
  • 哇,这真是一个初学者的错误,我错过了。关于最大,只看随机数生成的表达式,0 是最小的可能。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2023-03-14
  • 2013-01-20
  • 2023-03-16
  • 2019-06-22
相关资源
最近更新 更多