
13.12.2009, 16:36
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
Сообщение от BitHack
помогите с программой плиз.
Дана целочисленная квадратная матрица n*n
1) Найти номера столбцов элементы которых образают убываюшую последовательность. Номера вывести на печать.
2) Номера выделенных столбцов возвести в квадрат и вывести на печатать, расположив по возрастанию.
Вот тебе на С. Дополнительная сортировка номеров столбцов не нужна, т.к. они и так в массиве по-порядку
Код:
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef struct {
int* col_nums;
int col_count;
} matrix_info_t;
#define N 3
matrix_info_t* scan_matrix(int* M, int n);
int main(int argc, char** argv)
{
int M[N*N] = {
5,2,3,
4,3,2,
3,4,1
};
matrix_info_t * m_info = scan_matrix(M, N);
(void)printf("Номера столбцов:\n");
for(int i = 0; i < m_info->col_count; i++){
(void)printf("%d ", m_info->col_nums[i]);
}
(void)printf("\nНомера столбцов в квадрате:\n");
for(int i = 0; i < m_info->col_count; i++){
(void)printf("%d ", m_info->col_nums[i]*m_info->col_nums[i]);
}
(void)printf("\n");
return 0;
}
matrix_info_t* scan_matrix(int* M, int n){
matrix_info_t * ret = malloc(sizeof(matrix_info_t));
ret->col_count = 0;
for(int j = 0; j < n; j++){
bool correct_column = true;
for(int i = 1; i < n; i++){
if(M[N*(i - 1) + j] < M[N*i + j]){
correct_column = false;
break;
}
}
if(correct_column){
ret->col_nums = realloc(ret->col_nums, sizeof(int) * ret->col_count++);
ret->col_nums[ret->col_count - 1] = j;
}
}
return ret;
}
Последний раз редактировалось ss88; 13.12.2009 в 17:03..
|
|
|