Другие языки программирования и технологии
отсортировать рандомную матрицу змейкой Язык СИ
с помощью сортировки отбором или вставкой и через выделение памяти (malloc,calloc) отсортировать рандомную матрицу змейкой, такая, чтобы закручивалась к центру в центре в итоге самое мало число??
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, **a, **p, pc, r, c;
srand(time(NULL));
printf("размерность матрицы? ");
scanf("%d", &n);
printf("матрица:\n");
a = malloc(n * sizeof(a[0]));
for (r = 0; r < n; ++r) {
a[r] = malloc(n * sizeof a[0][0]);
for (c = 0; c < n; ++c) printf("%""4d ", a[r][c] = rand() % 100);
putchar('\n');
}
p = malloc(n * n * sizeof p[0]);
pc = 0;
for (r = 0; r < n / 2; ++r) {
for (c = r; c < n - r - 1; ++c) p[pc++] = &a[r][c];
for (c = r; c < n - r - 1; ++c) p[pc++] = &a[c][n - r - 1];
for (c = n - r - 1; c > r; --c) p[pc++] = &a[n - r - 1][c];
for (c = n - r - 1; c > r; --c) p[pc++] = &a[c][r];
}
if (n % 2) p[pc++] = &a[n / 2][n / 2];
putchar('\n');
for (r = 0; r < n * n - 1; ++r) {
int m = r;
for (c = r + 1; c < n * n; ++c) if (*p[c] > *p[m]) m = c;
if (m != r) {
int t = *p[r];
*p[r] = *p[m];
*p[m] = t;
}
}
free(p);
for (r = 0; r < n; ++r) {
for (c = 0; c < n; ++c) printf("%""4d ", a[r][c]);
putchar('\n');
free(a[r]);
}
free(a);
return 0;
}
#include <stdlib.h>
int main() {
int n, **a, **p, pc, r, c;
srand(time(NULL));
printf("размерность матрицы? ");
scanf("%d", &n);
printf("матрица:\n");
a = malloc(n * sizeof(a[0]));
for (r = 0; r < n; ++r) {
a[r] = malloc(n * sizeof a[0][0]);
for (c = 0; c < n; ++c) printf("%""4d ", a[r][c] = rand() % 100);
putchar('\n');
}
p = malloc(n * n * sizeof p[0]);
pc = 0;
for (r = 0; r < n / 2; ++r) {
for (c = r; c < n - r - 1; ++c) p[pc++] = &a[r][c];
for (c = r; c < n - r - 1; ++c) p[pc++] = &a[c][n - r - 1];
for (c = n - r - 1; c > r; --c) p[pc++] = &a[n - r - 1][c];
for (c = n - r - 1; c > r; --c) p[pc++] = &a[c][r];
}
if (n % 2) p[pc++] = &a[n / 2][n / 2];
putchar('\n');
for (r = 0; r < n * n - 1; ++r) {
int m = r;
for (c = r + 1; c < n * n; ++c) if (*p[c] > *p[m]) m = c;
if (m != r) {
int t = *p[r];
*p[r] = *p[m];
*p[m] = t;
}
}
free(p);
for (r = 0; r < n; ++r) {
for (c = 0; c < n; ++c) printf("%""4d ", a[r][c]);
putchar('\n');
free(a[r]);
}
free(a);
return 0;
}
Похожие вопросы
- Помогите с обходим матрицы змейкой (нужно отредактировать формулу)
- Помогите решить задачу: C# Создать рандомную матрицу nxn (выполнено) после чего сложить данные выделенные элементы:
- Как заполнить матрицу змейкой в Паскале?
- Почему язык СИ такой сложный?
- Помогите, пожалуйста. Как на языке СИ транспонировать матрицу?
- Язык Си. Определить S-сумму элементов на периметре матрицы.
- Язык си. Рекурсивно транспонировать матрицу
- Программирование на языке СИ с использованием подпрограммы-функции
- Программирование на языке Си. Нужна небольшая помощь.
- какую программу лучше использовать для программирования на языке Си?