Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: Вопрос по Алгоритму:
Просто ради интереса пытаюсь понять работу данного алгоритма и... у меня не получается :( - помогите кто-нибудь:

{ все ли элементы массива различны? }

var a:array[1..10] of integer;
i,j:integer;
begin
writeln('введите 10 элементов массива');
for i:=1 to 10 do readln( a[i] );
i:=1;

До этого момента все понятно, а вот дальше:

while (i<10) and (j<11) do begin
Задаем цикл для i от 1 до 9 и j до 10 - именно до 9!
j:=i+1;
Присваиваем j значение на 1 больше i
while (j<11) and (a[i]<>a[j]) do inc(j);
Здесь мы проходим для каждого i (!!!) по всем остальным j начиная с i+1 до 10
inc(i);
Дальше увеличиваем i на 1
end;
Самое главное, что мне не понятно:
if i<11 then writeln('в массиве есть одинаковые элементы')
else writeln('все элементы массива различны');
Ка условие i<11 будет невыполнено - ведь нигде нет ограничений на увеличение i - тем более до 11???
end.
Заранее спасибо.


1
  1  Максим, 29 июля 2007 г. 14:40:16
      а если что-нибудь типа этого,хотя я не уверен for i:=1 to n do begin read(a); x = x xor a; if x = 0 begin write('есть одинаковые'); break; end; end; write('все различные')
     Не верно. Вот тест: 1, 2, 3. (тем более "все различные" выводится всегда)
  2  Максим, 29 июля 2007 г. 14:38:28
      а если что-нибудь типа этого,хотя я не уверен

for i:=1 to n do
  3  Беляев Сергей Николаевич, 18 июля 2007 г. 8:27:05
      Я бы сказал, что это дурной какой то алгоритм, тем более неверный. По завершении программа будет выводить всегда, что в массиве есть одинаковые элементы, т.к. действительно всегда будет i<11. Вообще проще всего решить проверкой папарно всех a[i] и a[j] для различных i и j (обычный двойной цикл) . Но сложность будет O(N*N). Если массив большой, то можно быстрой сортировкой отсортировать и линейно пробежать, проверяя соседние, не равны ли они.
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru