Алгоритмическое мышление при решении задач (на примере языка C#). Шамшев А.Б - 23 стр.

UptoLike

Составители: 

23
Задача 8: Удалить те элементы массива, которые встречаются в нем ровно
два раза.
Рассуждения:
1. Данная задача может быть рассмотрена в виде трех шагов:
a. Ввод данных (задача рассматривалась ранее)
b. Обработка данных
c. Вывод обработанных данных (задача рассматривалась ранее)
2. Очевидно, что из данных у нас есть массив (для конкретики возьмем
массив целых чисел) и назовем его data.
3. Для обработки массива необходимо знать только сам массив. Других
данных для его обработки не надо. Очевидно, что если обработка
заключается в удалении тех элементов массива, которые встречаются в
нем ровно два раза, то в результате обработки массив будет изменятся
(а вернее может измениться
). Поэтому сигнатура функции обработки
будет следующая:
public static void processArray(ref int[] data) {
4. Как выполнить обработку массива? Для ответа на этот вопрос
переформулируем задание: «Если элемент массива встречается в нем
ровно два раза, то удалить его». Казалось бы это верная формулировка,
но это не так. Приведем конкретный пример. Пусть у нас есть массив
(1,2,3,4,1). Мы проверяем нулевой элемент массива (1). Этот элемент
входит в
массив два раза. После удаления останется массив (2,3,4,1).
И обратите внимание на то, что последняя единица осталась, а по
заданию она должна была удалиться. Поэтому сделаем верную
переформулировку задания: «Если элемент массива встречается в нем
ровно два раза, то удалить все элементы массива, которые равны
текущему».
5. В последней фразе четко просматривается
конструкция «Если …, то
…». При этом «удалить все элементы массива, которые равны
текущему» является удалением по значению, которое рассматривалось
выше. Вспомним сигнатуру функции:
public static void delByValue(ref int[] data, int delValue) {
Удаляемое значение равно тому значению элемента массива, который
входит в него два раза.
6. Теперь возникает вопрос, как найти условие в «Если …, то …».
На естественном языке условие звучит: «Элемент массива встречается в
нем ровно два раза». Для ответа на вопрос, сколько раз встречается
элемент массива в массиве, надо знать значение элемента
массива и сам
массив. Поэтому сигнатура функции будет иметь следующий вид: