Задача заключается в следующем.
Дана действительная квадратная матрица порядка n. Найти наибольшее
из значений элементов, расположенных в закрашенной части матрицы:
В общем-то вся соль этой задачи в том, чтобы считать элементы «нижнего
треугольника» квадратной матрицы. Это просто, если учесть кое-какую
закономерность. Последняя строка считывается полностью, а последующие
строки вверх до середины матрицы считываются не полностью. От всех
строк, начиная с предпоследней и до середины, отсекается с каждого края
по 1, по 2, по 3 ... и т.д. (до n/2).
Это можно организовать следующим образом. Считываются строки массива
от строки n-1 до n/2. Притом надо учесть особенности языка, на котором
Вы составляете программу. Если это C-подобный язык (кроме Python), то
достаточно обычного деления (так как при делении целого числа на целое
результат получается без дробной части, так что про нее можно
благополучно забыть). Если это Pascal или Object Pascal, то вместо
деления нужно будет использовать DIV. Если же вы пишете программу на
Python, то следует использовать, так же, как и в Pascal, целочисленное
деление. В Python целочисленное деление записывается как // (два
слэша). То есть таким образом мы считаем массив ровно до середины, не
зависимо от того, четная у него размерность или не четная.
В пределах строк элементы надо считывать в интервале от k до m, которые
изначально должны иметь значения 0 и n соответственно. С каждой новой
строкой k должно увеличиваться на 1, а m должно уменьшаться на 1. Таким
образом мы будем обрезать при считывании крайние ненужные элементы
строк.
Ну и, конечно же, так как задача состояла в нахождении наибольшего
элемента из элементов в «нижнем треугольнике», параллельно со
считыванием элементов находим максимум. Удобнее это сделать, присвоив
заранее переменной max значение самого нижнего левого элемента (так как
считывать начинаем с него), а затем сравнивать каждый считанный элемент
с переменной max, присваивая к ней элемент массива, если он больше нее.
Вот, собственно, и все!
Пример задачи на C
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { int M[100][100]={0}, i, j, n, k, m, x, max; randomize(); printf("Enter size of squre matrix (n): "); scanf("%d", &n); //заполнение и вывод матрицы n x n for (i=0; i<n; i++) { for (j=0; j<n; j++) { M[i][j]= random(10); printf("%d ", M[i][j]); } printf("\n"); } printf("\n"); //читаем элементы нижнего треугольника по строкам снизу вверх k=0; m=n; x=n/2; max= M[n][1]; printf("Elements of bottom triengulare (strings bottom to top):\n"); for (i=(n-1); i>=x; i--) { for (j=k; j<m; j++) { printf("%d ", M[i][j]); if (M[i][j]>max) max= M[i][j]; } printf("\n"); k=k+1; m=m-1; } printf("\n"); printf("Maximum from these elements is %d", max); getch(); }
Поделиться ссылкой в соц. сетях: | |
|