Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Последовательность из 3-х элементов

Автор: 18192123 5.06.2007 17:00

Дана матрица А(55). Определить массив Х из 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;
}


Автор: 18192123 5.06.2007 20:25

Уже разобралась, в чём была ошибка:


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;
}


Автор: klem4 5.06.2007 21:28

Я бы так сделал:

# 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;
}