簡體   English   中英

按字典順序排列矩陣中的列

[英]Arranging columns in a matrix lexicographically

我一直在嘗試通過字典順序(如果列共享相同的元素,那么我們比較下面行中的元素等)對矩陣中的列(維度是 m,n <= 10)進行排序,並添加一些額外的條件。 我需要使用函數來打印矩陣,輸入最多 5 個隨機整數作為其元素,最后排列矩陣。 我想我正確地得到了打印和隨機輸入,但我無法弄清楚排序。 另外我不能使用我不知道該怎么做的全局變量,因為我沒有被顯示。 一個示例矩陣是: 在此處輸入圖像描述

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int m, n;
    int mat[10][10];

    void print_matrix()
    {
        int i, j;
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
            {
                printf("%d ", mat[i][j]);
            }
            printf("\n");
        }
    }

    void random_int()
    {
        int i, j;
        srand((unsigned)time(NULL));
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
            {
                mat[i][j] = rand() % 5;
            }
        }
    }

    void arrange()
    {
        int i, j, k, a;
        for (j = 0; j < n; ++j)
        {
            for (i = 0; i < m; ++i)
            {
                for (k = i + 1; k < m; ++k)
                {
                    if (mat[i][j] < mat[k][j])
                    {
                        a = mat[i][j];
                        mat[i][j] = mat[k][j];
                        mat[k][j] = a;
                    }
                }
            }
        }
    }


    printf("Input the number of rows : ");
    scanf("%d", &m);
    printf("Input the number of columns: ");
    scanf("%d", &n);

    random_int(mat[m][n]);
    print_matrix(mat[m][n]);
    arrange(mat[m][n]);
    print_matrix(mat[m][n]);

    return 0;
}

試試這個解決方案(僅適用於輸入 0-8),也使用全局變量

有多種解決方案。 但是是最簡單的。 我已將每一列轉換為 integer 值。 然后對整數進行冒泡排序。 排序后。 然后我將 integer 值轉換為數字。 (您必須知道如何將單個數字轉換為多個數字 integer 和多個數字整數轉換為單個數字。

注意我已經為每個數字添加了一個 (1)。 因為輸入可以為零(0)。 如果將 0 0 2 1 轉換為 integer 將只有 21。前兩位數字丟失。 所以我加了 1。所以 0 0 2 1 將轉換為 1132。我對每個輸入都做了(加了 1)(排序后減去了 1)。 所以它不會影響其他輸入。 小心輸入必須是從(0到8)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int m, n;
int mat[10][10];
int generatedNumber[10];

void print_matrix()
{
printf("The matrix is:\n");
int i, j;
for (i = 0; i < m; i++)
{
    for (j = 0; j < n; j++)
    {
        printf("%d ", mat[i][j]);
    }
    printf("\n");
 }
}

void random_int()
{
int i, j;
srand((unsigned)time(NULL));
for (i = 0; i < m; i++)
{
    for (j = 0; j < n; j++)
    {
        mat[i][j] = rand() % 5;
    }
 }
}

void arrange()
{
int i, j, k, a;
for (j = 0; j < n; ++j)
{
    int number = 0;
    for (i = 0; i < m; ++i)
    {
        number = number * 10 + mat[i][j] + 1;///Adding one for avoiding zero(0)

    }
    generatedNumber[j] = number;
}

for(i = 0; i < n; i++)
{
    for(j = 0; j < n-i-1; j++)
    {
        if( generatedNumber[j] > generatedNumber[j+1])
        {
            // swap the elements
            int temp = generatedNumber[j];
            generatedNumber[j] = generatedNumber[j+1];
            generatedNumber[j+1] = temp;
        }
    }
}

for(i = 0; i < n; i++)///columwise
{
    int generatedColumnvalue = generatedNumber[i];
    for(j = m -1; j>= 0; j--)///row wise and fro last vaue to first
    {

        mat[j][i] = (generatedColumnvalue%10)-1;///removing extra added 1
        generatedColumnvalue/=10;
    }
  }
 }

 int main()
 {
printf("Input the number of rows : ");
scanf("%d", &m);
printf("Input the number of columns: ");
scanf("%d", &n);

random_int();
print_matrix();
arrange();
print_matrix();

return 0;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM