Задача на массив
|
|
resister | Дата: Суббота, 20.12.2008, 04:32 | Сообщение # 1 |
Старый знакомый
Группа: Пользователи
Сообщений: 25
Статус: Offline
| Среди элементов массива Z(m) найти k (k<<m) наибольших. Поиск осуществить за один проход (просмотр) массива Z.
:shubizsetisforuma:
|
|
| |
Alexander | Дата: Суббота, 20.12.2008, 05:42 | Сообщение # 2 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| И в чём проблем-то? Задачка очень простая, ждём ваши наработки или конкретные вопросы.
Скажем дружно- нафиг нужно!
|
|
| |
resister | Дата: Суббота, 20.12.2008, 08:54 | Сообщение # 3 |
Старый знакомый
Группа: Пользователи
Сообщений: 25
Статус: Offline
| Мне момент нахождения наибольших значений не до конца понятен.
:shubizsetisforuma:
|
|
| |
Alexander | Дата: Суббота, 20.12.2008, 09:04 | Сообщение # 4 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| создаём массив из k элементов, туда копируем k первых элементов массива Z и сортируем. Затем в цикле от k+1 до m проверяем больше ли проверяемый элемент минимального из вспомогательного массива, и если да, то заменяем и сортируем.
Скажем дружно- нафиг нужно!
|
|
| |
resister | Дата: Воскресенье, 21.12.2008, 07:33 | Сообщение # 5 |
Старый знакомый
Группа: Пользователи
Сообщений: 25
Статус: Offline
| Code begin vvod(z,m); k:= m div 2; l[k]:=z[m]; for I := k+1 to m do begin while l[k]<z[i] do l[k]:=z[i]; end; writeln('naibolshie elementi',' ',l[k]); readln; end. Добавлено (21.12.2008, 00:33) --------------------------------------------- И чето не работает. Подскажите что здесь подправить?
:shubizsetisforuma:
|
|
| |
Alexander | Дата: Воскресенье, 21.12.2008, 07:46 | Сообщение # 6 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| В условии сказано найти k наибольших элементов(а тут я вообще не понял что делается, но на выводе только один). Можно вообще просто сделать, найти максимум k раз, главное предыдущий максимум не учитывать.
Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Воскресенье, 21.12.2008, 07:46 |
|
| |
resister | Дата: Воскресенье, 21.12.2008, 21:15 | Сообщение # 7 |
Старый знакомый
Группа: Пользователи
Сообщений: 25
Статус: Offline
| Ээээм а можете кодом помочь? А то чето я не понял куда тогда складывать эти k элементов? Или для каждого надо новый массив?
:shubizsetisforuma:
|
|
| |
Seqular | Дата: Воскресенье, 21.12.2008, 21:24 | Сообщение # 8 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Ну можно на крайняк k объявить в константах, и выделить массив размером в k элементов дополнительно.
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
Alexander | Дата: Воскресенье, 21.12.2008, 21:55 | Сообщение # 9 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Ну тупо пузырьковую сортировку до катого элемента: Code for i:=1 to k do for j:=m-1 downto i do if z[j+1]>z[j] then begin temp:=z[j]; z[j]:=z[j+1]; z[j+1]:=temp; end; {=================} for i:=1 to k do write(z[i]:4); {это уже вывод результата}
Скажем дружно- нафиг нужно!
|
|
| |
resister | Дата: Понедельник, 22.12.2008, 02:25 | Сообщение # 10 |
Старый знакомый
Группа: Пользователи
Сообщений: 25
Статус: Offline
| Чет выдает она только первые k элементов.
:shubizsetisforuma:
|
|
| |
Alexander | Дата: Понедельник, 22.12.2008, 03:10 | Сообщение # 11 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Quote (resister) Чет выдает она только первые k элементов. не первые, а наибольшие.
Скажем дружно- нафиг нужно!
|
|
| |
resister | Дата: Понедельник, 22.12.2008, 03:26 | Сообщение # 12 |
Старый знакомый
Группа: Пользователи
Сообщений: 25
Статус: Offline
| У меня по данному коду k первых.
:shubizsetisforuma:
|
|
| |
Alexander | Дата: Понедельник, 22.12.2008, 08:12 | Сообщение # 13 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Приведи весь программный код.
Скажем дружно- нафиг нужно!
|
|
| |
resister | Дата: Понедельник, 22.12.2008, 20:38 | Сообщение # 14 |
Старый знакомый
Группа: Пользователи
Сообщений: 25
Статус: Offline
| А все заработала. Я фиг знает мб глюк был. Code begin writeln('kolichestvo'); readln(m); writeln('elementi'); for i := 1 to m do readln(z[i]); k:= 3; for i := 1 to m do l[i]:=z[i]; for i := 1 to k do for j:= m -1 downto i do if l[j+1]>z[j] then begin b:=z[j]; z[j]:=z[j+1]; z[j+1]:=b; end; writeln('naibolshie elementi massiva'); for I := 1 to k do write(z[i]:4); readln; end. Добавлено (22.12.2008, 13:38) --------------------------------------------- Огромное спасибо! Это мне на зачет просто))))
:shubizsetisforuma:
|
|
| |