Перестановка столбцов по убыванию значений минимальных элементов - C (СИ)
Формулировка задачи:
Переставить столбцы по убыванию значений минимальных элементов столбцов
Что-то написал , но не работает .
Помогите доделать
#include <stdio.h>
#include <stdlib.h>
int main()
{
srand(time(NULL));
int n, m, i, j, g, k=0, a[100][100];
printf("vvedit k-st stovbciv ");
scanf("%d",&n);
printf("vvedit k-st ryadkiv ");
scanf("%d",&m);
for (i=0;i<n;i++){
for (j=0;j<m;j++){
a[i][j]=-10+rand()%20;
printf("%3d ",a[i][j]);
}
printf("\n");
}
int tru=0;
printf("radky yaki mayut vid'emni elementy\n");
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
if (a[i][j]<0 ) tru=1;
}
if (tru==1) printf("%d\n",i);
tru=0;
}
int min=a[0][0];
for (i=0;i<n;i++)
{
if (a[i][0]<min) min=a[i][0];
}
printf("\nmin=%d",min);
k=a[0][j];
for (j=0;j<m;j++)
{
for (i=0;i<n;i++)
{
if (a[i][j]<k ) k=a[i][j];
}
if (k<min)
{
for (i=0;i<n;i++)
{
g=a[i][j-1];
a[i][j-1]=a[i][j];
a[i][j]=g;
}
}
k=a[i+1][j+1];
}
printf("\n\n\n\n");
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
return 0;
}Решение задачи: «Перестановка столбцов по убыванию значений минимальных элементов»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int a[100][100];
int n, m, i, j, g, k;
int min1, min2;
srand(time(NULL));
printf("vvedit k-st stovbciv ");
scanf("%d", &n);
printf("vvedit k-st ryadkiv ");
scanf("%d", &m);
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
a[i][j] = rand() % 20 - 10;
printf("%5d", a[i][j]);
}
printf("\n");
}
printf("radky yaki mayut vid'emni elementy\n");
for (i = 0; i < m; i++) {
j = 0;
while (j < n && a[i][j] >= 0) {
j++;
}
if (j < n) {
printf("%d\n", i);
}
}
// сортировка пузырьком
for (i = 1; i < n; i++) {
for (j = n-1; j >= i; j--) {
// находим минимальные элементы в столбцах j и j-1
min1 = a[0][j-1];
min2 = a[0][j];
for (k = 0; k < n; k++) {
if (a[k][j-1] < min1) {
min1 = a[k][j-1];
}
if (a[k][j] < min2) {
min2 = a[k][j];
}
}
if (min1 < min2) {
// меняем j и j-1 столбцы местами
for (k = 0; k < n; k++) {
g = a[k][j-1];
a[k][j-1] = a[k][j];
a[k][j] = g;
}
}
}
}
printf("\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
printf("%5d", a[i][j]);
}
printf("\n");
}
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявляются массив и переменные для ввода данных от пользователя.
- Заполняются случайными значениями массив a[100][100].
- Выводятся на экран полученные значения массива.
- Пользователю предлагается ввести номер строки, содержащей минимальный элемент.
- В цикле с помощью функции scanf() вводится номер строки.
- В этом же цикле осуществляется поиск минимального элемента в выбранной строке.
- Если найденный минимальный элемент не равен нулю, то с помощью функции printf() выводится номер строки.
- Затем осуществляется сортировка массива a[100][100] методом пузырька.
- В цикле происходит сравнение минимальных элементов в текущих столбцах и при необходимости производится перестановка столбцов.
- После сортировки массив выводится на экран.