|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.11.2022, 12:08 | #1 |
Новичок
Джуниор
Регистрация: 25.11.2022
Сообщений: 2
|
Помощь в решение задачи на С++
Всем привет, я являюсь абсолютным новичком в С++. И мне задали решить три задачи, прошу, пожалуйста, помогите разобраться в них))
1) Необходимо задать массив, без генерации, просто в коде. И если он отсортирован по возрастанию, вывести 1, если по убыванию вывести 2, если все элементы массива одинаковые, то 0, и если массив не упорядочен то -1. Пример: 1 - Если массив отсортирован по возрастанию. 2 - Если массив отсортирован по убыванию. 0 - Если все элементы массива одинаковые. -1 - Если массив не упорядочен. -4 5 10 10 13 56 100 => 1 10 8 8 5 5 2 -10 => 2 8 8 8 8 8 8 8 => 0 3 6 8 8 5 10 34 1 => -1 10 23 45 20 100 120 => -1 2) Нужно среди всех ЧЕТНЫХ чисел массива нужно найти самый максимальный элемент и количество его повторений в данном массиве. Пример: 17 25 8 10 11 10 2 -4 57 => max = 10 , repeats 2 times 7 9 11 -10 3 -4 17 -4 95 -4 1 => max = -4, repeats 3 times 3) Самое сложное на мой взгляд, Дан массив. Элементы массива принадлежат интервалу [0, 20] Нужно найти самую длинную непрерывную последовательность элементов с шагом 1. Функция должна вернуть именно ДЛИНУ. 2 4 7 8 10 11 1 3 => 4. [1 2 3 4] 0 10 1 11 2 12 3 16 13 17 8 9 => 6. [ 8 9 10 11 12 13] P.s. задачи не относятся к одному массиву, это просто три разных задачи) |
25.11.2022, 17:55 | #2 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
1) Оцениваете первые два элемента массива и инициализируете значение результата в 0 (первый элемент равен второму), 1 (первый элемент меньше второго) или 2 (первый элемент больше второго). Далее запускаете цикл со счетчиком начинающийся со второго элемента и до предпоследнего, в котором проверяете тоже самое (i-ый элемент сравниваете с (i+1)-м). Если i-ый элемент равен (i+1)-му и значение переменной результата не равно 0, тогда устанавливаете значение в -1 и прерываете цикл (break). Если i-ый элемент меньше (i+1)-го и значение переменной результата не равно 1, тогда устанавливаете значение в -1 и прерываете цикл. Если i-ый элемент больше (i+1)-го и значение переменной результата не равно 2, тогда устанавливаете значение в -1 и прерываете цикл. После цикла выводите значение из переменной результата.
2) Инициализируете 2 переменные: переменная счетчик (устанавливаете в 1) и переменная значение (устанавливаете равной первому элементу массива). Затем запускаете цикл со счетчиком со второго элемента до последнего, в котором проверяете следующее: если i-ый элемент массива кратный двум (a[i] & 1 == 0 или a[i] % 2 == 0) и он же больше значения сохраненного во второй переменной, тогда устанавливаете значение второй переменной в значение i-го элемента, а первую переменную счетчик сбрасываете в 1, иначе если значение второй переменной равно значению i-го элемента, тогда увеличиваете на единицу значение в первой переменной счетчике. После окончания цикла еще раз проверяете значение во второй переменной на четность и выводите сообщение с найденными значением и количеством повторений, иначе выводите сообщение, что в массиве нет четных элементов. 3) 1 этап - сортировка элементов: выбираем алгоритм сортировки - пускай будет сортировка выбором: Запускаете цикл со счетчиком от первого элемента до предпоследнего. В цикле инициализируете переменную значением счетчика цикла и запускаете еще один сложенный цикл от (i+1)-го элемента и до последнего, в котором сравниваете элемент с сохраненным индексом с элементом с индексом равным счетчику вложенного цикла и если первый элемент больше второго, тогда сохраняете в переменной номер элемента равного индексу вложенного цикла. После завершения вложенного цикла проверяете на равенство индексов сохраненного в переменной и равного счетчику первого цикла и, если они не равны, тогда обмениваете эти два элемента местами. 2 этап. Нахождение последовательности элементов: Для этого достаточно пройти по массиву в цикле со счетчиком и вычитать из (i+1)-го элемента i-ый элемент и, если разница равна 1, тогда увеличивать счетчик на 1, иначе сравниваете значение с переменной с максимальным значением счетчика (обновляете его, если оно больше) и сбрасываете счетчик в 0. |
27.11.2022, 01:34 | #3 | |
Форумчанин
Регистрация: 26.10.2022
Сообщений: 119
|
Это грабли C++ (унаследованные от C). Приоритет операций такой, что сначала будет ==, а потом &. Надо скобки писать:
Код:
Цитата:
Код:
|
|
27.11.2022, 02:37 | #4 | ||
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Цитата:
Цитата:
Если усложнять, тогда можно просто завести переменную типа int |
||
27.11.2022, 03:36 | #5 | ||
Форумчанин
Регистрация: 26.10.2022
Сообщений: 119
|
Цитата:
Цитата:
:: -- самый высокий приоритет (в начале списка) , -- самый низкий приоритет (в конце списка) Именно поэтому, во всех компиляторах C и C++: Код:
|
||
27.11.2022, 04:00 | #6 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Код:
Странное у вас описание. https://godbolt.org/z/rrPKn31sq Бывает. Забываются нюансы. Там глюк с 0 результатами. Последний раз редактировалось macomics; 27.11.2022 в 04:05. |
27.11.2022, 10:52 | #7 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,559
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
помощь в решение | Мальвина_0 | Помощь студентам | 1 | 27.08.2020 15:24 |
Решение задачи на с++ | АлександрСаша | Помощь студентам | 1 | 27.02.2019 18:35 |
Решение задачи VBS | nap15 | Помощь студентам | 2 | 15.10.2016 20:41 |
Решение задачи | zheka21 | Помощь студентам | 13 | 08.11.2012 12:06 |
Решение задачи | Raphael | Помощь студентам | 4 | 07.10.2010 18:45 |