Задача : Вводится массив. Верно ли, что в нем каждое значение встречается не более 2-х раз.
Как сравнить первое значение в массиве со всеми остальными значениями? или тут можно решить эту задачу другим образом?
klem4
10.12.2006 15:57
по разному можно ... вот лобовой вариант:
i := 1; count := 0;
while (i <= n) and (count <= 2) do begin count := 1; j := 1; while (j <= n) and (count <= 2) do begin if (a[i] = a[j]) and (i <> j) then inc(count); inc(j); end; if count <= 2 then inc(i); end;
if i > n then writeln('Yes') else writeln('No');
Алена
10.12.2006 16:08
klem4
j := 1;
?
Может лучше с i начинать (все, что было раньше - уже проверено)?
Хотя нет... Тогда придется еще проверять, не тестировалось ли это число уже...
klem4
10.12.2006 16:09
Цитата
Может лучше с i начинать (все, что было раньше - уже проверено)?
Пожалуй
Цитата
Хотя нет... Тогда придется еще проверять, не тестировалось ли это число уже...
Всеравно быстрее будет работать, ведь если найден "неподходящий" элемент, внешний цикл сразу прекратится ... Это если бы вопрос стоял "нету ли элементов, которые встречаеются < 2 раз", вот тогда полюбому j := 1;
Алена
10.12.2006 16:21
Объясняю: <2, 2, 3, 4, 2, 3, 4, 5> Откуда надо начинать, чтобы при i указывающем на выделенный элемент не получить count = 1 ?
status
10.12.2006 16:25
а если использовать визуальную программу и массив вводится через Listbox , это решение тоже можно использовать?
klem4
10.12.2006 16:25
До этой двойки дело не дойдет
Уже для первой двойки count будет равен 3
внутренний цикл прервется, за тем прервется внешний (while (i <= n) and (count <= 2))
а за тем проверка, которая даст отрицательный результат: