Расположите строки массива в порядке возрастания количества одинаковых элементов в каждой строке?
Напишите программу, которая считывает с клавиатуры число n> 1 строк и число m> 1 столбцов двумерного массива (mnatricei), а затем считывает с клавиатуры эти n X m элементов массива.
Расположите строки массива в порядке возрастания количества одинаковых элементов в каждой строке.
Это тривиальное задание. Что вы попытались сделать сами? Смогли массив прочитать? Можете подсчитать, сколько одинаковых элементов в строке? Алгоритм сортировки вызвать можете?
Я не знаю как именно выполнять шаги Подсчета одинаковых элементов в строке и алгоритм сортировки.
#include
int main()
{
int n, m, a[20][20], ki, k=0, b[20];
printf("\tDati numarul de linii : "); scanf("%d",&n);
printf("\tDati numarul de coloane : "); scanf("%d",&m);
for (int i=0;i
for (int j=0;j
printf("\tElementul [%d][%d] : ",i,j);
scanf("%d",&a[i][j]);
}
}
printf("\n----------------------------------------------------\n");
for (int i=0;i
for (int j=0;j
printf("%5d",a[i][j]);
}
printf("\n\n");
}
printf("\n----------------------------------------------------\n");
for (int i=0;i
// k=0;
for (int j=0;j
for(int p=0;p
ki=a[j][p];
if (a[i][j]==ki)
k++;}
}
b[i]=k;
k=0;
// printf("%d",k);
}
for (int i=0; i
printf("%4d",b[i]);
return 0;
}
Damian Dante, Ваш код выглядит обрезанным. циклы в С++ идут for(int i=0; i < n; ++i).
Вот, вы смогли прочесть массив.
Для подсчета количества одинаковых элементов в каждой строке переберите 2 элемента:
for (int i=0; i<n; ++i) {
b[i] = 0; // b - глобальный массив! Объявляйте его вне main()
for (int j=0; j<m; ++j) {
for (int p=j+1; p<m; ++p) {
if (a[i][j]==a[i][p]) ++b[i];
}
}
}
Теперь сортировка. Используйте std::sort.
Что бы не перемещать строки, сортируйте их номера. Заведите массив rows с номерами строк, и сортируйте его, используя специальную функцию сравнения, которая сравнивает не сами числа, а строки с этими номерами:
// в main() после ввода.
int rows[20];
for (int i=0; i<n; ++i) rows[i] = i;
// сортировке передаются первый элемент,
// элемент после последнего и компаратор -
// функция сравнения, которая проверяет, что первое
// значение должно идти раньше второго.
sort(rows, rows+n, &Cmp);
// теперь rows отсортирован. Выводим строки rows[0], rows[1]...
for (int i=0; i < n; ++i) {
for (int j=0; j<m; ++j) {
printf("%4d", a[rows[i]][j]);
}
printf("\n");
}
// Отдельная функция, описана перед main():
bool Cmp(const int &i, const int &j) {
return b[i] < b[j]; // тут обращаемся к глобальному массиву b.
}