Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2575.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
1.86 Mб
Скачать

Рассмотрим массив целых или действительных чисел А1,

..., Аn. Пусть требуется переставить элементы этого массива так, чтобы после перестановки они были упорядочены по не убыванию А1<=A2<=...<=An. Эта задача называется задачей сортировки или упорядочения массива. Для решения этой задачи можно воспользоваться следующими алгоритмами:

I. Сортировка выбором

Найти элемент массива, имеющий наибольшее значение, переставить его с первым элементом, затем проделать то же самое, начав со второго элемента и т.д.

II. Сортировка обменами (метод пузырька)

Последовательным просмотром чисел А1, ..., Аn найти наименьшее i такое, что А(i)>A(i+1). Поменять местами A(i) и A(i+1), возобновить просмотр с элемента A(i+1) и т.д. Тем самым наибольшее число передвинется на последнее место. Следующие просмотры начинать опять сначала, уменьшая на единицу количество просматриваемых элементов. Массив будет упорядочен после просмотра, в котором участвовали только первый и второй элементы.

III. Сортировка простыми вставками

Просматривать последовательно A2, ..., An и каждый новый элемент Ai вставлять на подходящее место в уже упорядоченную совокупность A(1)...A(i-1). Это место определяется последовательным сравнением Ai с упорядоченными элементами A(1), ..., A(i-1).

Двумерные массивы

Двумерные массивы являются аналогами матриц. Первый индекс элемента двумерного массива определяет номер строки, а второй – номер столбца, на пересечении, которых расположен элемент. Строки и столбцы нумеруются либо от единого заранее установленного минимального значения индекса, либо от граничного значения, заданного одновременно с объявлением массива.

81

Для задания значений двухмерного массива можно воспользоваться процедурой с использованием генератора случайных чисел.

Например:

Program Array_Full;

Const n=10;

Type mas = array [1..n, 1..n] of Integer; Var m:mas;

Procedure Enter (Var tabl: mas); Var i, j: Integer;

Begin

For i:= 1 to n do For j:= 1 to n do

tabl[i,j]:=Random(10);

End;

Begin

Randomize;

Enter (m);

End.

С помощью процедуры Enter осуществляется ввод двумерного массива размерностью 10 10 случайными числами из диапазона от 0 до 10. Задание диапазона значений определяется константой n=10.

Описание двухмерного массива производится следующим образом:

Const

n=<ранг матрицы>;

Type

matr=array [1..n,1..n] of <тип элементов матрицы>;

Var

<имя матрицы>: matr;

82

Список задач раздела 13

2.1.Ввести массив из M x N элементов. Сформировать новый массив, повернув исходный на 90 градусов против часовой стрелки.

2.2.Последовательность (массив) a с элементами из множества {0,1}. Проводятся следующие действия. Если a имеет вид 1,0,1,… , то она укорачивается на первые три элемента. В противном случае начальный элемент последовательности переносится в её конец. Указанные действия повторяются до тех пор, пока имеется возможность укоротить текущую последовательность.

2.3. Прямоугольное поле m на n разбито на mn квадратных клеток. Некоторые клетки покрашены в черный цвет. Известно, что все черные клетки могут быть разбиты на несколько непересекающихся и не имеющих общих вершин черных прямоугольников. Считая, что цвета клеток даны в виде массива типа array [1..m] of array [1..n] of boolean;

подсчитать число черных прямоугольников, о которых шла речь. Число действий должно быть порядка m*n.

2.4.Дан массив x: array [1..n] of integer. Найти количество различных чисел среди элементов этого массива. (Число действий должно быть порядка n*n.)

2.5.Дан массив x: array [1..n] of integer. Найти количество различных чисел среди элементов этого массива, если известно, что все элементы массива - числа от 1 до k и число действий должно быть порядка n+k.

2.6.Дан массив x [1]..x[n] целых чисел. Не используя других массивов, переставить элементы массива в обратном порядке.

2.7. Дан массив целых чисел x[1]..x[m+n], рассматриваемый как соединение двух его отрезков: начала x[1]..x[m] длины m и конца x[m+1]..x[m+n] длины n. Не используя дополнительных массивов, переставить начало и конец. (Число действий порядка m+n.)

83

2.8.Коэффициенты многочлена хранятся в массиве a: array [0..n] of integer (n - натуральное число, степень многочлена).

Вычислить значение этого многочлена в точке x (т. е. a[n]*(x в степени n)+...+a[1]*x+a[0]).

2.9.Дан массив x: array [1..n, 1..n] of integer. Произвести перестановку строк массива таким образом, чтобы в первой

строке был наименьший элемент массива, во второй наименьший из оставшихся и т.д..

2.10.В массивах a:array [0..k] of integer и b: array [0..l] of integer хранятся коэффициенты двух многочленов степеней k и l. Поместить в массив c: array [0..m] of integer коэффициенты их произведения. (Числа k, l, m - натуральные, m = k + l; элемент массива с индексом i содержит коэффициент при x в степени i.)

2.11.В неупорядоченном массиве целых чисел (как положительных, так и отрицательных) найти сегмент с максимальной суммой элементов.

1.2.12. Даны два возрастающих массива x: array [1..k] of integer и y: array [1..l] of integer. Найти количество общих элементов в этих массивах (т. е. количество тех целых t, для которых t = x[i] = y[j] для некоторых i и j). (Число действий порядка k+l.)

2.13.Массив длины N в случайном порядке заполнен целыми числами из диапазона от 0 до N. Каждое число встречается в массиве не более одного раза. Найти отсутствующее число (дырку). Использование дополнительной памяти, пропорциональной длине массива, не допускается.

2.14.Даны два неубывающих массива x: array [1..k] of integer и y: array [1..l] of integer. Найти число различных элементов среди x[1],...,x[k], y[1],...,y[l]. (Число действий порядка k+l.)

2.15.Даны два массива x[1] <= ... <= x[k] и y[1] <= ... <= y[l]. "Соединить" их в массив z[1] <= ... <= z[m] (m = k+l; каждый элемент должен входить в массив z столько раз, сколько раз он входит в общей сложности в массивы x и y). Число действий порядка m.

2.16.Даны два массива x[1] <= ... <= x[k] и y[1] <= ... <= y[l].

Найти их "пересечение", т.е. массив z[1] <= ... <= z[m], содержащий их общие элементы, причем кратность каждого

84

элемента в массиве z равняется минимуму из его кратностей в массивах x и y. Число действий порядка k+l.

2.17.Даны два массива x[1]<=...<=x[k] и y[1]<=...<=y[l] и

число q. Найти сумму вида x[i]+y[j], наиболее близкую к числу q. (Число действий порядка k+l, дополнительная память - фиксированное число целых переменных, сами массивы менять не разрешается.).

2.18.Некоторое число содержится в каждом из трех целочисленных неубывающих массивов x[1] <= ... <= x[p], y[1] <=

... <= y[q], z[1] <= ... <= z[r]. Найти одно из таких чисел. Число действий должно быть порядка p + q + r.

2.19.Дана матрица размера М х N. В каждом ее столбце найти количество элементов, больших среднего арифметического всех элементов этого столбца.

2.20.Дана матрица размера M × N. Упорядочить ее столбцы так, чтобы их максимальные элементы образовывали возрастающую последовательность.

2.21.Дана матрица размера M × N. Элемент матрицы называется ее локальным минимумом, если он меньше всех окружающих его элементов. Заменить все локальные минимумы данной матрицы на нули. При решении допускается использовать вспомогательную матрицу.

2.22.Дана матрица размера M × N. Найти максимальный среди элементов тех столбцов, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные столбцы в матрице отсутствуют, то вывести 0.

2.23.Дан неубывающий массив положительных целых чисел a[1] <= a[2] <=...<= a[n]. Найти наименьшее целое положительное число (не равное 1), не представимое в виде суммы нескольких элементов этого массива (каждый элемент массива может быть использован не более одного раза). Число действий порядка n.

2.24.Даны действительные числа А1, ..., Аn, Р, натуральное число k (A1<=...<=An, k<=n). Удалить из А1, ..., Аn элемент с номером k (т.е. Ak) и вставить элемент. равный Р, так, чтобы не нарушилась упорядоченность .

85

2.25.В целочисленном массиве a[1]..a[n] хранится перестановка чисел 1..n (каждое из чисел встречается по одному разу). Не используя других массивов, заменить перестановку на обратную (если до работы программы a[i]=j, то после должно быть a[j]=i).

2.26.Дана матрица размера М х N. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке.

2.27.Дана матрица размера M × N. Упорядочить ее строки так, чтобы их первые элементы образовывали возрастающую последовательность.

2.28.Дан массив a[1]..a[n] и число m<=n. Для каждой группы из m стоящих рядом членов (таких групп, очевидно, n-m+1) вычислить ее сумму. Общее число действий должно быть порядка n.

2.29.Дана квадратная таблица a[1..n][1..n] и число m<=n.

Для каждого квадрата размера m на m в этой таблице вычислить сумму стоящих в нем чисел. Общее число действий должно быть порядка n*n.

2.30.Ввести числовую квадратную матрицу N x N элементов. Найти суммы элементов на периметрах всех вложенных квадратных подматриц, центр которых совпадает с центром исходной матрицы.

2.31.Дана целочисленная матрица размера M × N, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк, похожих на первую строку данной матрицы.

2.32.Дана целочисленная матрица размера M × N. Найти номер последнего из ее столбцов, содержащих равное количество положительных и отрицательных элементов (нулевые элементы матрицы не учитываются). Если таких столбцов нет, то вывести 0.

2.33.Дана целочисленная матрица размера M × N. Найти количество ее столбцов, все элементы которых различны.

2.34. Дана матрица размерам х N. Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы (при этом поменяются местами строки с номерами 1 и М, 2 и М - 1 и

т. д.).

86

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]