1

Тема: Допоможіть з алгоритмом, коду не потрібно)

Написати функцію, яка приймає масив числових значень, обчислює і повертає найбільший елемент масиву після максимального. Наприклад, для масиву [1, 2, 3, 4, 5, 5] результат обчислення функції буде 4, але бл*ть можна використовувати, лише один масив)
Поясніть на пальцях, як це має працювати)

2 Востаннє редагувалося FakiNyan (17.10.2015 13:24:35)

Re: Допоможіть з алгоритмом, коду не потрібно)

спочатку сортуєте у порядку спадання, наприклад, бульбашковим алгоритмом, а потім дивитесь на перший елемент і на другий, якщо другий і перший елементи мають різне значення, то тоді повертаєте другий елемент, якщо ж вони однакові, то перевіряєте тепер другий і третій, якщо вони різні, то повертаєте третій елемент...
це на випадок отакого
5, 5, 3, 2, 1
тут треба повернути третій елемент, трійку

Але можна ще легче, я гадаю.
Дивіться.  Створюємо якусь змінну з мінімальним можливим значенням, якесь там -100000000 або типу того, після цього створюєте ще одну таку змінну.
Далі проходите по кожному елементу масиву і перевіряєте - якщо поточний елемент більший значення першої змінної (у котрої значення -100000000), то присвоюєте цій змінній, і після цього одразу перевіряєте, якщо цей елемент менше першої змінної, але більше другої змінної (у котрої від початку теж значення -10000000), то присвоюєте цей елемент другій змінній.
Таким чином перша змінна буде містити максимальний елемент, а друга - максимальний, але менший за максимальний, ну ви зрозуміли.

Подякували: budlokoder, Yola2

3

Re: Допоможіть з алгоритмом, коду не потрібно)

Ніхто ніколи не задає ніяких ніби-то "найменших" (-100000000) чи "найбільших" значень! А самий примітивний алгоритм, який має задовольнити умову вашої задачі, доволі простий. Просто доведеться двічі пройтися по масиву:
перший прохід - визначаємо найбільше
другий прохід - визначаємо найбільше, але виключаємо із порівняння найбільший елемент (його зберігти у окремій змінній, не масив), знайдений під час першого проходу. Ось і все - таким чином, у вас буде той, що одразу після найбільшого.

Подякували: Yola1

4

Re: Допоможіть з алгоритмом, коду не потрібно)

Master_Sergius написав:

Ніхто ніколи не задає ніяких ніби-то "найменших" (-100000000) чи "найбільших" значень! А самий примітивний алгоритм, який має задовольнити умову вашої задачі, доволі простий. Просто доведеться двічі пройтися по масиву:
перший прохід - визначаємо найбільше
другий прохід - визначаємо найбільше, але виключаємо із порівняння найбільший елемент (його зберігти у окремій змінній, не масив), знайдений під час першого проходу. Ось і все - таким чином, у вас буде той, що одразу після найбільшого.

нє, ну не обов'язково присвоювати найменше значення тим змінним, можна присвоїти просто перший елемент масиву, наприклад, просто там же може бути якесь здорове значення, типу +54985, а в масиві максимальне може бути 5, і тоді нічо не знайдете, якщо будете просто перевіряти, чи більший поточний елемент масиву за змінну, котра має потім містити макс. елемент

5

Re: Допоможіть з алгоритмом, коду не потрібно)

Покажу на php..

$arr = [1, 2, 3, 4, 5, 5]; //масив з числами
$max = max($arr); //найбільше число (5)
for($i=0; $i<count($arr); $i++) //перебираємо елементи масиву
//якщо поточний елемент масиву = максимальному,то "видаляємо" його
if($arr[$i] == $max) $arr[$i] = NULL; 
print max($arr); //виводимо наступний найбільший (4)

6

Re: Допоможіть з алгоритмом, коду не потрібно)

VTrim написав:

Покажу на php..

Прихований текст

вся суть веб-макак
http://не-дійсний-домен/kNvTe/ef0e6cdf3c.png

7 Востаннє редагувалося VTrim (17.10.2015 17:58:44)

Re: Допоможіть з алгоритмом, коду не потрібно)

FakiNyan написав:
VTrim написав:

Покажу на php..

Прихований текст

вся суть веб-макак
http://не-дійсний-домен/kNvTe/ef0e6cdf3c.png

Прихований текст

Анімешне біосміття :). Завдання вирішується декількома рядками,а ти цілу теорему розписав :D. На C все буде по суті так само.

8

Re: Допоможіть з алгоритмом, коду не потрібно)

1. Берете дві змінні для зберігання двох значень елементів масиву - максимального і  "менш максимального"
2. Проходите по масиву і всі його елементи зрівнюєте з "менш максимальним". Якщо поточний елемент масиву більший за "менш максимального" то:
  1. заміняєте "менш максимальний" поточним елементом
  2. визначаєте з двох елементів меншого
3. Доходите до кінця масиву і повертаєте елемент, визначений в п2.2 як кінцевий результат.

9 Востаннє редагувалося P.Y. (17.10.2015 20:26:31)

Re: Допоможіть з алгоритмом, коду не потрібно)

По-моєму, простіше так:

1. Берете дві змінні для зберігання двох значень елементів масиву - максимального і  "менш максимального"
1.1. Ініціалізуєте їх значеннями перших двох елементів масиву (більше — в максимальний, менше — в "менш максимальний")
1.1. Записуєте в них значення найменшого елемента.
2. Проходите по масиву і всі його елементи зрівнюєте з максимальним. Якщо поточний елемент масиву більший за максимального то:
  1. заміняєте "менш максимальний" максимальним
  2. заміняєте максимальний поточним елементом
3. Доходите до кінця масиву і повертаєте менш максимальний

РЅ: А взагалі, треба уточнити: якщо в масиві всі елементи однакові, то що слід вважати «менш максимальним»?

10

Re: Допоможіть з алгоритмом, коду не потрібно)

P.Y. написав:

По-моєму, простіше так:

1. Берете дві змінні для зберігання двох значень елементів масиву - максимального і  "менш максимального"
1.1. Ініціалізуєте їх значеннями перших двох елементів масиву (більше — в максимальний, менше — в "менш максимальний")
1.1. Записуєте в них значення найменшого елемента.
2. Проходите по масиву і всі його елементи зрівнюєте з максимальним. Якщо поточний елемент масиву більший за максимального то:
  1. заміняєте "менш максимальний" максимальним
  2. заміняєте максимальний поточним елементом
3. Доходите до кінця масиву і повертаєте менш максимальний

РЅ: А взагалі, треба уточнити: якщо в масиві всі елементи однакові, то що слід вважати «менш максимальним»?

Такий алгоритм невірний, ви не розглядаєте той варіант коли значення поточного елемент масиву "знаходиться між" значеннями змінних. Наприклад у вас в змінних значення 1, 5, а значення поточного елементу масиву 3.

11

Re: Допоможіть з алгоритмом, коду не потрібно)

Arete написав:
P.Y. написав:

По-моєму, простіше так:

1. Берете дві змінні для зберігання двох значень елементів масиву - максимального і  "менш максимального"
1.1. Ініціалізуєте їх значеннями перших двох елементів масиву (більше — в максимальний, менше — в "менш максимальний")
1.1. Записуєте в них значення найменшого елемента.
2. Проходите по масиву і всі його елементи зрівнюєте з максимальним. Якщо поточний елемент масиву більший за максимального то:
  1. заміняєте "менш максимальний" максимальним
  2. заміняєте максимальний поточним елементом
3. Доходите до кінця масиву і повертаєте менш максимальний

РЅ: А взагалі, треба уточнити: якщо в масиві всі елементи однакові, то що слід вважати «менш максимальним»?

Такий алгоритм невірний, ви не розглядаєте той варіант коли значення поточного елемент масиву "знаходиться між" значеннями змінних. Наприклад у вас в змінних значення 1, 5, а значення поточного елементу масиву 3.

ну і?
Поточний елемент більше прешої змінної? Ні.
Поточний елемент більше другої змінної і менше першої? Так. Присвоюємо другій змінній (котра менша за максимальну) поточний елемент.

12

Re: Допоможіть з алгоритмом, коду не потрібно)

В алгоритмі нема порівняння елементу масиву з другою змінною, тому невідомо більший він за неї чи ні.

13

Re: Допоможіть з алгоритмом, коду не потрібно)

значить я то не увидив, гг