在C

时间:2018-01-16 23:41:10

标签: c arrays sorting matrix

我有一个任务要对二维数组进行排序,但这对我来说真的很难。我无法弄清楚我在哪里弄错了。

使用while循环而不是for循环

会很好

这是任务:

  1. 输入尺寸为n。
  2. 的方形矩阵
  3. 主要对角线下方的元素按升序排序。
  4. 主对角线以上的元素按降序排列。
  5. 主对角线排序的元素:
    • 按升序排列的第一个偶数。
    • 然后按降序排列奇数。
  6. 排序前的

    矩阵:

    1  5  4  7  2
    
    4  8  5  9  0
    
    2  7  6  5  3
    
    3  1  7  4  9
    
    2  5  1  7  3
    

    排序后的矩阵:

    4  9  9  7  5
    
    1  6  5  5  4 
    
    1  2  8  3  2 
    
    2  3  4  3  0
    
    5  7  7  7  1
    

    以下是代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main () {
    
        int n, i, j, a, k, l, o;
        int m[50][50];
    
        printf ("Enter n of square matrix : \n");
        scanf ("%d", &n);
    
        printf ("Enter rows and columns numbers n :\n");
    
        i = 0;
        while (i < n) {
            j = 0;
            while (j < n) {
                scanf ("%d", &m[i][j]);
                j++;
            }
            i++;
        }
        printf ("Matrix before sorting \n");
        i = 0;
        while (i < n) {
            j = 0;
            while (j < n) {
                printf ("%d  ", m[i][j]);
                j++;
            }
            printf ("\n");
            i++;
        }
        printf ("Matrix after sorting \n");
    
        i = 0;
        while (i < n) {
            j = 0;
            while (j < n) {
                if (i < j) {
                    k = j + 1;
                    while (k < (n - 1)) {
                        if (m[i][k] < m[i][k + 1]) {
                            a = m[i][k];
                            m[i][k] = m[i][k + 1];
                            m[i][k + 1] = a;
                        }
                        k++;
                    }
                } 
                else if (i > j) {
                    l = i + 1;
                    while (l < (n - 1)) {
                        if (m[l][j] > m[l + 1][j]) {
                            a = m[l][j];
                            m[l][j] = m[l + 1][j];
                            m[l + 1][j] = a;
                        }
                        l++;
                    }
                } 
                else {
                    if (m[i][j] % 2 == 0 && m[i + 1][j + 1] % 2 == 0) {
                        if (m[i][j] > m[i + 1][j + 1]) {
                            a = m[i][j];
                            m[i][j] = m[i + 1][j + 1];
                            m[i + 1][j + 1] = a;
                        }
                    }
                    if (m[i][j] % 2 != 0 && m[i + 1][j + 1] % 2 != 0) {
                        if (m[i][j] < m[i + 1][j + 1]) {
                            a = m[i][j];
                            m[i][j] = m[i + 1][j + 1];
                            m[i + 1][j + 1] = a;
                        }
                    }
                }
                j++;
            }
            i++;
        }
    
        i = 0;
        while (i < n) {
            j = 0;
            while (j < n) {
                printf ("%d  ", m[i][j]);
                j++;
            }
            printf ("\n");
            i++;
        }
    
        return 0;
    }
    

    02/02/2018更改

    我需要编写简单的代码,不需要像size_t,buffer和pointer等...

    我做了一些代码,但是当我使用奇数n个矩阵时它不能正常工作(例如5x5)我不知道我在哪里犯错。

     #include <stdio.h>
     #include <stdlib.h>
    
     int main()
     {
    static int a[500][500];
    int i,j,l,k,m,b,n,t,d,c;
    
    printf("Unesite n kvadratne matrice : \n");
    scanf("%d" , &n);
    printf("Matrica pre sortiranja \n \n");
    
    for ( i = 0; i < n; i++)
    {
        for ( j = 0; j < n ; j++)
        {
            scanf("%d",&a[ i ][ j ]);
        }
    }
    
    
    for ( i = 0; i < n; i++)
    {
        for ( j = 0; j < n; j++)
        {
            if ( i > j )  // ispod dijagonale
            {
                    for ( l = i ; l < n ; l++)
                {
                    for ( k = j ; k < l  ; k++ )
                    {
                        if ( a[ i ][ j ] > a[ l ][ k ] && k  < l )
                        {
                        t = a[ i ][ j ];
                        a[ i ][ j ] = a[ l ][ k ];
                        a[ l ][ k ] = t ;
                        }
                    }
                }
            }
            if ( i < j ) // iznad dijagonale
            {
                for ( m = i ; m < n  ; m++)
                {
                    for ( b = j ; b < n ; b++)
                    {
                        if ( a[ i ][ j ] < a[ m ][ b ] && m < b )
                        {
                        t = a[ i ][ j ];
                        a[ i ][ j ] = a[ m ][ b ];
                        a[ m ][ b ] = t ;
                        }
                    }
                }
            }
            if ( i == j ) // dijagonala
            {
                for (d = i ; d < n ; d++)
                    {
                    for ( c = d + 1 ; c < n ; c++)
                        {
                        if ( a[ d ] [ d ] % 2 != 0 && a[ c ] [ c]%2 == 0 )
                            {
                            t = a[ d ] [ d ] ;
                             a[ d ] [ d ] = a[ c ] [ c] ;
                             a[ c ] [ c] = t ;
                            }
                        }
                    }
                    for (d = i ; d < n ; d++)
                        {
                        for ( c = d + 1 ; c < n ; c++)
                            {
                                 if ( a[ d ][ d ] %2 == 0 && a[ c ][ c ] %2 ==0 
           && a[ d ][ d ] > a [ c ][ c ])
                                {
                                t = a[ d ] [ d ] ;
                                a[ d ] [ d ] = a[ c ] [ c] ;
                                a[ c ] [ c] = t ;
                                }
                                else if ( a[ d ][ d ] %2 != 0 && a[ c ][ c ] %2 
       !=0 && a[ d ][ d ] < a [ c ][ c ])
                                {
                                t = a[ d ] [ d ] ;
                                a[ d ] [ d ] = a[ c ] [ c] ;
                                a[ c ] [ c] = t ;
                                }
                            }
                        }
            }
        }
      }
    
        printf("Posle sortiranja : \n");
        for ( i = 0; i < n; i++)
        {
            for ( j = 0; j < n;j++)
            {
            printf("    %d  ",a[i][j]);
            }
        printf("\n \n");
        }
      return 0;
     }
    

0 个答案:

没有答案