Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/56: Рейтинг темы: голосов - 56, средняя оценка - 4.54
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202

Элементы с максимальной разностью

23.07.2021, 08:58. Показов 10913. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Отношение
Дан массив a1,a2,…an. Необходимо выбрать в нём два элемента ai и aj, такие что i<j, и отношение aj/ai — максимально и больше 1.

Входные данные

В первой строке задано целое число 2 ≤n≤ 100 000 — количество элементов в массиве.

Во второй строке заданы n целых положительных чисел ai(1 ≤i≤n, 1 ≤ai≤ 5000).

Выходные данные

Выведите два числа — индексы элементов i и j. Если ответов несколько, то выведите любой из них.

Если ответа нет, то выведите два нуля, разделённых пробелом.

Примеры
Ввод
6
10 3 5 3 11 9
Вывод
2 5
Ввод
4
5 5 5 5
Вывод
0 0
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int a[100001];
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    int imin = 0;
    int ibest = 0;
    int jbest = 1;
    for (int j = 2; j < n; ++j)
    {
        if (a[j - 1] < a[imin])
            imin = j - 1;
        if (a[j] - a[imin] > a[jbest] - a[ibest])
        {
            jbest = j;
            ibest = imin;
        }
    }
    if (a[ibest] - a[jbest] == 0)
    {
        cout << 0 << " " << 0;
  }
    else
    {
        cout << ibest + 1 << " " << jbest + 1<< endl;
    }
 
}
Помогите пожалуйста! Сайт пишет, что программа выдаёт неверный ответ
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.07.2021, 08:58
Ответы с готовыми решениями:

В массиве найти пару элементов с максимальной разностью
Задание 2. Составьте программу, отыскивающую среди пар элементов одномерного массива М те, разность между элементами которых есть...

Заменить каждый элемент массива разностью максимальной и минимальной из его цифр
Дан массив, содержащий 10 трехзначных чисел. Заменить каждый элемент массива разностью максимальной и минимальной из его цифр.

Функция находящая адрес последовательности с максимальной разностью между первым и последним элементом
Разработать функцию, которая возвращает указатель на начало такой последовательности из трех элементов целочисленного массива, в которой...

29
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
23.07.2021, 09:43
Привет! Посмотри, может подойдет.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;
int main()
{
    int num;
    cin >> num;
    int *arr = new int[num];
    for(int i = 0; i < num; i++)
    {
        cin >> arr[i];
    }
    int min = 0, max = 0;
    for(int i = 0; i < num; i++)
    {
        for(int j = 0; j < num; j++)
        {
            if(i>j)
            {
            continue;
                
            }
            else if(abs(arr[j]/arr[i]) > abs(arr[max]/arr[min]))
            {
                max = j;
                min = i;
            }
        }
    }
    if (min != 0 || max !=0)
    cout << min +1 << " " << max + 1;
    else
    cout << min << " " << max;
    return 0;
}
0
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202
23.07.2021, 13:05  [ТС]
Спасибо, но программа выполнялась слишком долго
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
23.07.2021, 16:22
C++
1
2
3
4
5
6
//....
auto min = std::min_element(std::begin(array),  std::end(array));
auto max = std::max_element(min,  std::end(array));
auto i = (*max > *min) ? min - std::begin(array) + 1 : 0;
auto j = i + (max - min);
std::cout << i << " " << j << std::endl;
0
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202
23.07.2021, 16:25  [ТС]
Скинь пожалуйста полностью программу!
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
23.07.2021, 16:29
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
 
int main()
{
    size_t n; std::cin >> n;
    std::vector<int> array(n);
    std::copy(std::istream_iterator<int>{std::cin}, {}, array.begin());
    auto min = std::min_element(std::begin(array),  std::end(array));
    auto max = std::max_element(min,  std::end(array));
    auto i = (*max > *min) ? min - std::begin(array) + 1 : 0;
    auto j = i + (max - min);
    std::cout << i << " " << j << std::endl;
}
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
23.07.2021, 16:40
woldemas, во-первых, результат будет неверный, если amax/amin<1, и, во-вторых - код нерационален (2 прохода по массиву), а можно сделать за один.
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
23.07.2021, 16:43
Цитата Сообщение от Catstail Посмотреть сообщение
можно сделать за один.
можно, но лень писать цикл, да и асимптотика та же, однако
Цитата Сообщение от Catstail Посмотреть сообщение
результат будет неверный, если есть отрицательные числа
Цитата Сообщение от dmitrii2000 Посмотреть сообщение
заданы n целых положительных чисел
Цитата Сообщение от Catstail Посмотреть сообщение
результат будет неверный, если amax/amin<1
не понял, но вполне возможно
0
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202
23.07.2021, 16:48  [ТС]
Сайт пишет, что программа выдаёт неверный ответ
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
23.07.2021, 16:48
А... Нет, алгоритм должен быть другой. Искать максимум и минимум - не совсем то. Максимум может оказаться левее минимума.
1
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202
23.07.2021, 16:52  [ТС]
Напишите пожалуйста программу
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
23.07.2021, 17:05
Цитата Сообщение от woldemas Посмотреть сообщение
не понял, но вполне возможно
- да, это моя ошибка. При положительных числах так быть не может. И, боюсь, что все равно придется не максимум с минимумом искать, а перебирать пары. А это O(n2)
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
23.07.2021, 17:35
Цитата Сообщение от Catstail Посмотреть сообщение
а перебирать пары. А это O(n2)
Да, я наврал, упираюсь в глобальный минимум, а меня и локальный устроит. Но мне кажется, это все таки однопроходная задача и истина где-то рядом.
0
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202
23.07.2021, 17:57  [ТС]
Это однопроходная задача
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.07.2021, 18:55
вроде работает

выглядит правда ужасно, но и стараться за кого то кто сам не старается , не охота.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//g++  7.4.0
 
#include <iostream>
#include <sstream>
 
int main()
{
    std::istringstream iss{"6\n 10 3 5 3 11 9"};
    int min = 0, max = 0, max_prev = 0, num;
    double k = 0.0;
    int i=0, j=0;
    int N = 0, n = 0;
    iss >> N;
    iss >> min;
    ++n; i = n;
    while(n<N && iss>>num)
    {
        ++n;
        if (num < min)
        {
            min = num;
            i = n;
        }
        if (num > min)
        {
            if ( ((double)num / min ) > k )
            {
                k = (double)num / min;
                j = n;
            }
        }
    }
    if (j) 
        std::cout << i << ' ' << j ;
    else 
        std::cout << "0 0";
}
1
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
23.07.2021, 19:00
dmitrii2000, попробуй так (хотя наверное опять наврал, что-то сегодня туго соображается)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
 
int main()
{    
    size_t n; std::cin >> n;
    std::vector<int> array(n);
    std::copy_n(std::istream_iterator<int>{std::cin}, n, array.begin());
    size_t m = 0, i = 0, j = 0;
    for(size_t k = 1; k < array.size(); ++k) {
        if(array[k - 1] < array[m]) m = k - 1;
        if(array[k] - array[m] > array[j] - array[i]) {
            i = m;
            j = k;
        }
    }
    if(array[i] == array[j]) std::cout << 0 << " " << 0 << std::endl;
    else std::cout << i + 1 << " " << j + 1 << std::endl;
    return 0;
}
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.07.2021, 19:15
woldemas, что то я не вижу у тебя проверки условия , а именно деления, нахождение коэффициента разности

Цитата Сообщение от dmitrii2000 Посмотреть сообщение
Необходимо выбрать в нём два элемента ai и aj, такие что i<j, и отношение aj/ai — максимально
Добавлено через 3 минуты
то есть, числа 2 5, К = 5 / 2 = 2,5
и 7-10 , К = 10 / 7 прибл 1,42
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
23.07.2021, 19:16
Цитата Сообщение от SmallEvil Посмотреть сообщение
у тебя проверки условия , а именно деления
В заголовке темы
элементы с максимальной разностью
вот я и пишу разность. Да и по сути-то одно и тоже, считайте что у меня в массиве логарифмы.

Цитата Сообщение от SmallEvil Посмотреть сообщение
то есть, числа 2 5, К = 5 / 2 = 2,5
А вот оно что, ну значит я задание неправильно понял, ну можно еще одно условие добавить.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.07.2021, 19:17
хотя разница между этими двумя парами чисел равна 3
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
23.07.2021, 19:25
SmallEvil, Хотя это странно, это явно лишнее условие и формулировка задачи подсказывает, что просто есть одна и та же задача для разных операций: деления и разности, и просто ТС заголовок скопировал не оттуда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.07.2021, 19:25
Помогаю со студенческими работами здесь

Ввести с клавиатуры логическое выражение для множеств с симметрической разностью и просто разностью, сам синтаксис?
Мне с клавиатуры нужно ввести множество по которому прога строит таблицу истинности, но я не знаю как мне ввести симметрическую разность,...

В массиве первый и последний нулевые элементы заменить разностью максимального и минимального элементов
Доброе время суток, нужно выполнить задание как минимум с 4 функциями, использовать интерфейс для ввода и вывода значений. Вот задание:...

Элементы дерева, которые больше задаваемой величины, заменить разностью максимального и минимального элементов
Элементы дерева,которые больше задаваемой величины,заменить разностью максимального и минимального элементов этого дерева

Вывести на экран нечетные элементы числового множества, которое является разностью двух других множеств
Помогите пожалуйста с решением задачи. Решить задачу на обработку множества. Вывести на экран нечетные элементы числового множества,...

Вывести на экран кратные трем элементы числового множества, которое является разностью двух других множеств
Помогите пожалуйста!!!! Решить задачу на обработку множества. Вывести на экран кратные трем элементы числового множества, которое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru