#c
#c
Вопрос:
Количество строк, столбцов и элементов вводится пользователем.
В 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]%dn", i, k1);
}
}
}
}
Ответ №1:
Я думаю, вам следует использовать какую-то структуру данных для хранения повторяющегося числа, которое вы найдете в каждой строке, чтобы вы могли обратиться к нему после перебора всей входной матрицы.
Решение могло бы заключаться в создании 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
На этом этапе вы можете упорядочить строки на основе того, какая строка содержит наибольшее число.
Очевидно, что может быть другое решение, но я думаю, что это концептуально достаточно просто.
Ответ №2:
Это демонстрация. Измените размер массива и выберите подходящий тип данных в соответствии с вашей реальной ситуацией Сначала введите количество строк и столбцов матрицы. Затем идут матричные данные.
#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<string.h>
int m,n;
typedef struct Node{
int data[100];
int repTime;
}Node;
int cmp(const void* a,const void* b){
return ((Node*)a)->repTime >((Node*)b)->repTime;
}
int main(){
Node num[1000];
int time[1000];
memset(num,0,sizeof(num));
scanf("%d%d",amp;m,amp;n);
for(int i=0;i<m;i ){
for(int j=0;j<n;j ){
int k;
scanf("%d",amp;k);
num[i].data[j]=k;
time[k] ;
if(time[k]>num[i].repTime){
num[i].repTime = num[i].data[k];
}
}
}
qsort(num,m,sizeof(struct Node),cmp);
for(int i=0;i<m;i ){
for(int j=0;j<n;j ){
printf("%d ",num[i].data[j]);
}
printf("n");
}
return 0;
}