2014-12-14 1 views
-3

무작위로 생성 된 행렬의 가장 큰 수를 행렬의 오른쪽 하단 모서리로 이동해야하지만 어떻게해야할지 모르겠다. 누군가 도와 줄 수 있어요. 이 내 코드입니다 :행렬의 최대 개수를 이동하는 방법

#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; 
} 
+1

행렬에서 가장 큰 숫자를 찾으면 행렬 [행 - 1] [열 - 1]'로 바꿉니다. –

+0

귀하의 질문에 약간 미달합니다. 가장 큰 숫자와 오른쪽 하단의 값을 바꿔야합니까? 동일한 가치가있는 위치가 여러 개있는 경우 어떻게해야합니까? –

답변

-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; 
처럼 보일 수 있습니다 다음
+0

이것은 많은 도움이되었습니다. 감사합니다. – Mangiux

+0

@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; 
} 
+0

이 문제가 무엇입니까? –

+0

잘못되었다고 말할 수있는 유일한 정보는 초기화입니다. 'largestRow' 또는'largestColumn'을 초기화하지 않습니다; 그게 큰 문제 야. 'largest = 0.0; '을 사용하는 것은 또한 모호하다 -'matrix [0] [0]'또는'matrix [rows-1] [columns-1]'을 사용하는 것이 더 낫다. '가장 큰 칼럼 '을 적절하게 사용한다. –

+0

와우, 그건 정말 초보자 실수입니다, 나는 그것을 놓쳤습니다. 가장 큰 것, 난수 생성을위한 표현식을 보자. '0'이 가능한 한 가장 작다. 고맙습니다. –

관련 문제