Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Динамические массивы

Автор: status 10.12.2006 15:41

Задача : Вводится массив. Верно ли, что в нем каждое значение встречается не более 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 начинать (все, что было раньше - уже проверено)?

Хотя нет... Тогда придется еще проверять, не тестировалось ли это число уже... no1.gif

Автор: klem4 10.12.2006 16:09

Цитата
Может лучше с i начинать (все, что было раньше - уже проверено)?



Пожалуй yes2.gif

Цитата
Хотя нет... Тогда придется еще проверять, не тестировалось ли это число уже...


Всеравно быстрее будет работать, ведь если найден "неподходящий" элемент, внешний цикл сразу прекратится ... Это если бы вопрос стоял "нету ли элементов, которые встречаеются < 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

rolleyes.gif

До этой двойки дело не дойдет smile.gif

Уже для первой двойки count будет равен 3

внутренний цикл прервется, за тем прервется внешний (while (i <= n) and (count <= 2))

а за тем проверка, которая даст отрицательный результат:

if i > n then writeln('Yes') else writeln('No');

Автор: Алена 10.12.2006 16:39

Ну, напечатала лишнюю двойку... Смысл-то тот же:
<2, 3, 4, 2, 3, 4, 5>

Теперь что будешь делать? Для первой двойки Count = 2, все в порядке... А для второй (если делать j := i)?

Автор: klem4 10.12.2006 16:50

Эм что-то я не врубаюсь, ну хорошо

Первай двойка: Count = 2, все ок
Вторая двойка: Count = 1 все ок

в чем проблема я понять не могу просто smile.gif


Автор: Алена 10.12.2006 17:03

<...>

Автор: status 10.12.2006 17:09

ммм...а как мне всё это понять? unsure.gif а то чтото я не понял ничего!