Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 20

Найти номер последнего локального максимума

29.09.2021, 13:10. Показов 1952. Ответов 9

Студворк — интернет-сервис помощи студентам
Дан массив целых чисел размера N. Найти номер последнего локального максимума. Локальный максимум – элемент, который больше любого из своих соседей.
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
#include <stdio.h>
int main()
{
    int a[10];
    int N;
    printf("N: ");
    scanf_s("%i", &N);
    int i;
    for (i = 0; i < N; ++i)
    {
        printf("a[%i] : ", i + 1);
        scanf_s("%i", &a[i]);
    }
    if (a[N - 1] > a[N - 2])
    {
        printf("%i \n", N);
    }
    else {
        i = N - 2;
        while ((i >= 1) && !((a[i - 1] < a[i]) && (a[i] > a[i + 1])))
        {
            --i;
        }
        printf("%i \n", i + 1);
    }
    return 0;
}
Поясните пожалуйста каждую строчку и принципе работы этой программы
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2021, 13:10
Ответы с готовыми решениями:

Найти номер первого локального минимума массива
Дан массив размера N. Найти номер его первого локального минимума (локальный минимум — это элемент, который меньше любого из своих соседей).

Найти номер последнего локального максимума
Дан массив размера N. Найти номер его последнего локального максимума. Локальный максимум — это элемент, который больше любого из своих...

Найти номер последнего локального максимума массива
Дан массив N размера.Найти номер его последнего локального максимума(локальный максимум -это элемент,больше любого из своих соседей).

9
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,852
Записей в блоге: 15
04.10.2021, 16:32
Лучший ответ Сообщение было отмечено ak1sh как решение

Решение

пояснять особо не чего, ну только условия можно
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
#include <stdio.h>
int main()
{
    int a[10];
    int N;
    printf("N: ");
    scanf_s("%i", &N);
    int i;
    for (i = 0; i < N; ++i)
    {
        printf("a[%i] : ", i + 1);
        scanf_s("%i", &a[i]);
    }
 
//если последний элемент больше предпоследнего, тогда он и есть посл.лок.максимум 
    if (a[N - 1] > a[N - 2])
        printf("%i \n", N);
 
//в ином случе
    else
    {
        i = N - 2; // начинается поиск посл.лок.максимума с индекса предпоследнего элемента
 
        //цикл - пока индекс проверяемого эл.не меньше первого
        //и проверяемый эл. не будет больше соседних(слева и справа),
        //уменьшать на 1, индекс проверяемого элемента
        while ((i >= 1) && !((a[i - 1] < a[i]) && (a[i] > a[i + 1]))) --i;
        printf("%i \n", i + 1);
    }
    return 0;
}
1
Заблокирован
04.10.2021, 17:05
мама Стифлера, а так ?
int a[10]={10,9,8,7,6,5,4,3,2,1};
1-ый элемент и есть последний локальный максимум. А у тебя -1 )

Добавлено через 4 минуты
Цитата Сообщение от ak1sh Посмотреть сообщение
Локальный максимум – элемент, который больше любого из своих соседей.
Хотя условие должно звучать так :
Локальный максимум – элемент, который больше всех своих соседей. Как бы ...
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,852
Записей в блоге: 15
04.10.2021, 17:08
Цитата Сообщение от SmallEvil Посмотреть сообщение
1-ый элемент и есть последний локальный максимум. А у тебя -1 )
Это не у меня, а в коде так определено. Типа 0 элемент - это элемент 1.
0
Заблокирован
04.10.2021, 17:48
но результат не "1", а "-1"

Добавлено через 12 минут
если все это офрмить в функцию, код будет в два раза меньшим
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
#include <iostream>
using std::size_t;
 
int main()
{
    int nums[]={5,1,2,5,3,-1,0,-155,5};
    //int nums[]={10,9,8,7,6,5,4,3,2,1};
    int local_max = -1;
    size_t size = sizeof nums / sizeof nums[0];
    if (!size)
        local_max = -1;
    else if (size==1)
         local_max = 0;
    else {
        do{
            
            if (nums[size-1] > nums[size-2]){
               local_max = size-1;
               break;
            }
            if (nums[0] > nums[1])
               local_max = 0;
            for (size_t i = size-2; i > 0 ; --i)
                if ( nums[i] > nums[i-1] && nums[i] > nums[i+1] ){
                    local_max = i;
                    break; 
                }
        }while(false);
    }
    std::cout << (local_max==-1 ? local_max : local_max + 1);
    return 0;
}
Добавлено через 7 минут
типа вот так
Кликните здесь для просмотра всего текста
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
#include <iostream>
using std::size_t;
int findLocalMax(int * nums, int size){
    int local_max = -2;
    if (!size)
        return -2;
    if (size==1)
        return 0;
    if (nums[size-1] > nums[size-2])
       return size-1;
    if (nums[0] > nums[1])
       local_max = 0;
    for (size_t i = size-2; i > 0 ; --i)
        if ( nums[i] > nums[i-1] && nums[i] > nums[i+1] )
            return i;
    return local_max;
}
int main()
{
    int nums[]={5,1,2,5,3,-1,0,-155,5};
    //int nums[]={10,9,8,7,6,5,4,3,2,1};
    std::cout << findLocalMax(nums, sizeof nums / sizeof nums[0]) + 1;
    return 0;
}
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,852
Записей в блоге: 15
04.10.2021, 18:14
SmallEvil, простите, но я не понимаю, чем не устраивал код от ТС? В нем ведь все элементарно и просто, а у вас много лишних проверок.
И не понимаю для чего 2 строка? Сам практически не знаю С++.
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 20
04.10.2021, 18:35  [ТС]
огромное вам спасибо! я начинаю понимать как это работает)) не могли бы вы так же пояснить последнюю задачу на поворот матрицы на 180 градусов
0
Заблокирован
04.10.2021, 19:11
ak1sh, но код работает неверно, я уже описал ситуацию при которой он выдает неверный результат.
Понимает он ...
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 20
04.10.2021, 19:16  [ТС]
я ввела как вы сказали и у меня правильно выдает локальный максимум
0
Заблокирован
04.10.2021, 19:20
Цитата Сообщение от мама Стифлера Посмотреть сообщение
а у вас много лишних проверок.
В задаче не указано длина последовательности.
Эти проверки нужны, скажем, если мы будем использовать пустой вектор, или не заполненный массив и так далее.
Убрать их легко. Не добавив их , код в один момент перестанет работать.
Это конечный код а не библиотека, проверки нужны.
Там проверка на пустой массив, на массив с 1 элементом.

Цитата Сообщение от мама Стифлера Посмотреть сообщение
И не понимаю для чего 2 строка?
using std::size_t; ?
size_t не является встроенным типом, он объявлен в пространстве имен std.
Я объявляю что буду его использовать.

Добавлено через 3 минуты
ладно, не путайте больше ветки , нужно С, пишите в раздел С ...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2021, 19:20
Помогаю со студенческими работами здесь

Найти номер последнего локального максимума массива
препод задал проги и сказал если нерешу невидать мне зачёта...1ую вроде какрешал но увынеправильно видать( 1)Дан масив размера N.Найти...

Найти номер его последнего локального максимума в массиве.
Дан массив размера N. Найти номер его последнего локального максимума.(Локальный максимум-это элемент,который больше любого из своих...

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

Найдите номер последнего локального максимума списка
Создайте список из случайных чисел. Найдите номер его последнего локального максимума (локальный максимум — это элемент, который больше...

Найти номер последнего локального максимума массива
Дан массив размера N. Найти номер его последнего локального максимума (локальный максимум - это элемент, который больше любого...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru