Показать сообщение отдельно

  #2015  
Старый 13.12.2009, 16:36
ss88
Участник форума
Регистрация: 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..
 
Ответить с цитированием