首页 > 解决方案 > 按照每行中相等元素数的升序对数组的行进行排序

问题描述

行数、列数和元素数由用户引入。

在 C 中

例如,我有数组:

1 1 0 3
2 0 0 0
2 3 4 5
3 3 3 3

它应该显示为:

2 3 4 5
1 1 0 3
2 0 0 0
3 3 3 3

现在我被困住了。如果有任何相等的元素,我试图给每一行一个“1”,然后我想总结这些数字,并以此为基础对行进行排序。我想过把每一行都变成一个数组,比较相等的元素,然后重新排列它们,但我不知道该怎么做。

我目前拥有的部分代码:

for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        for (int k = j + 1; k < m; k++) {
            if (tab[i][j] == tab[i][k]) {
                k1++;
                if (k1 > 1) {
                    k1--;
                }
                printf("a[%d]%d\n", i, k1);
            }
        }
    }
}

标签: c

解决方案


我认为您应该使用某种数据结构来存储您在每一行中找到的重复数字,以便您在遍历整个输入矩阵后可以查阅它。

解决方案可能包括创建一个R x 10矩阵,其中R是输入矩阵中的行数。在每一列中,您存储给定行中该索引处的数字的重复次数。

对于您的输入,您应该得到如下结果:

1 2 0 1 0 0 0 0 0 0
3 0 1 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0
0 0 0 4 0 0 0 0 0 0

此时,您可以根据包含最大数字的行对行进行排序。

显然可能还有其他解决方案,但我认为这个在概念上足够简单。


推荐阅读