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

UptoLike

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

73
Задача 16: Удалить те столбцы, в которых встречается хотя бы два
одинаковых элемента.
Рассуждения о решении:
1. В данной задаче работа идет со столбцами, поэтому основу решения
возьмем из задачи 14.
2. Если нам надо удалить столбец в двухмерном массиве, который
представлен как массив столбцов, то это классическая задача удаления
элемента по индексу
. Очевидно, что она должна быть реализована в
классе, который представляет из себя двухмерный массив.
public void delColumn(int colIndex) {
Array1D[] newColumns = new Array1D[columns.Length - 1];
for (int i = 0; i < colIndex; i++) {
newColumns[i] = columns[i];
}
for (int i = colIndex; i < newColumns.Length; i++) {
newColumns[i] = columns[i + 1];
}
columns = newColumns;
}
3. Для того, что бы ответить на вопрос, надо удалять столбец или нет,
необходимо определить, встречается ли в нем хотя бы два одинаковых
элемента. Очевидно, что при решении этого вопроса идет работа с
данными только текущего столбца, поэтому данный метод должен
находиться в классе, который представляет столбец.
4. Похожая задача уже
рассматриваласьзадача 7. Поэтому не будем
подробно описывать, как получилась реализация проверки
необходимости удаления. Опишем лишь псевдокод алгоритма проверки
необходимости удаления:
Для каждого элемента в столбце
НачалоЦикла
Если количествоВхождений текущего элемента больше 1, то
НачалоЕсли
Вернуть как результат истину
ОкончаниеЕсли
ОкончаниеЦикла
Вернуть как результат ложь.
public class Array1D {
public int[] data;
public Array1D(int _size, Random r) {
data = new int[_size];
for (int i = 0; i < data.Length; i++) {
data[i] = r.Next(0, 100);
}
}
public int getCount(int curValue) {