Дана матрица А(55). Определить массив Х из 5 элементов, каждый из которых равен 1, если в соответствующем столбце есть возрастающая подпоследовательность из трех элементов и нулю в противном случае.
Что-то я снова понапутала....
int *mas_x (int (*a)[n], int *x)
{
int i,j, count, k;
for (j = 0; j < n; j++)
{
count = 0 ;
for (k = 0; k < n; k++)
for (i = 0; i < n-k-1; i++)
if (a[i][j] < a[i+1][j])
count+=1;
if (count == 3)
x[j] = 1;
else x[j] = -1;
}
return x;
}
Уже разобралась, в чём была ошибка:
int *mas_x (int (*a)[n], int *x)
{
int i,j, count, k;
for (j = 0; j < n; j++)
{
count = 0 ;
for (k = 0; k < n; k++)
for (i = 0; i < n-k-1; i++)
if (a[i][j] < a[i+1][j])
count+=1;
else break;
if (count == 3)
x[j] = 1;
else x[j] = -1;
}
return x;
}
Я бы так сделал:
# include <stdlib.h>
# include <stdio.h>
void CreateVector(int **mx, int *arr, int n) {
for (int j = 0; j < n; j++) {
int i = 0;
while ((i <= n - 3) && ! ((mx[i][j] < mx[i+1][j]) && (mx[i+1][j] < mx[i+2][j])))
i++;
arr[j] = (i <= n - 3) ? 1 : -1;
}
}
int n, *x, **m;
int main (void) {
n = 5;
x = (int*)malloc(n * sizeof(int));
m = (int**)malloc(n * sizeof(int*));
for (int i = 0; i < n; i++)
m[i] = (int*)malloc(n * sizeof(int));
srand(time(NULL));
for (i = 0; i < n; i++) {
printf("\n");
for (int j = 0; j < n; j++) {
m[i][j] = rand() % 10;
printf("%3d", m[i][j]);
}
}
CreateVector(m, x, n);
printf("\n\n");
for (i = 0; i < n; i++) printf("%3d", x[i]);
free(x);
for (i = 0; i < n; i++) free(m[i]);
free(m);
return 0;
}