1) Дан массив, содержащий 10 целых чисел. Опишите на C++ алгоритм, позволяющий найти и вывести наибольшую чётную сумму двух рядом стоящих чисел, учитывая, что оба элемента при этом должны быть обязательно двузначными, содержащихся в массиве. Каждый элемент может принимать значения от 0 до 10000.
2) Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 1 до 10000 включительно. Опишите на C++ алгоритм, позволяющий найти и вывести наибольший из элементов массива, восьмеричная запись которого содержит не менее трёх цифр и оканчивается на 5. Если таких чисел нет, нужно вывести ответ 0.
3) Дан целочисленный массив из 200 элементов, в котором записаны значения последовательных результатов измерений. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на C++ алгоритм, который выполняет выбраковку данных в массиве: заменяет на 0 значения всех элементов, которые отличаются от среднего арифметического всех четных элементов более, чем на половину этого значения. Гарантируется, что хотя бы один чётный положительный элемент в массиве есть.
Дам в качестве ответа алгоритм решения.
а) если длина массива известна, то проходится он циклом for. От какого-то номера до какого-то.
б) во время перебора массива в цикле for у вас есть переменная-счетчик, позволяющая обратиться к i-тому элементу, а также к любому, номер которого можно выразить через эту переменную-счетчик (например, к элементу номер i-1 или i+1, и к любым другим выражениям с этой переменной).
в) если используете во время перебора массива такие выражения типа i-1 - обязательно указывайте границы цикла так, чтобы не вылезти случайно за пределы массива.
Теперь, алгоритм к первой задаче:
max = 0; // инициализируем переменную, в которой будет лежать наибольшая сумма. Т.к. элементы от 0 до 10000, самая маленькая возможная сумма 0.
нц для i от 1 до 9 // здесь идет от 1, вполне возможно, что ваш массив идет от 0, в таком случае надо будет вести до 8, как раз из-за пункта в)
если (9<a[i]) и (a[i]<100) // проверяем, что текущий элемент двузначный
и (9<a[i+1]) и (a[i+1]<100) // проверяем, что следующий элемент двузначный
и ( (a[i] + a[i+1]) mod 2 == 0 ) // проверям, что сумма четная
и ( (a[i] + a[i+1]) > max ) // проверяем, что новая сумма больше, чем уже сохраненная
то max = a[i] + a[i+1]; // если все-все-все условия выполняются, сохраняем в переменную max сумму текущего элемента и следующего
кц
вывод max;
думаю, алгоритмически задачу понять лучше, чем просто получить решение, ну а синтаксис вот:
#include <iostream>
using namespace std;
int main() {
int max = 0;
int a[3] = { 1, 2, 3 };
for (int i = 0; i < 2; i++) {
if (a[i]+a[i+1] > max) {
max = a[i] + a[i+1];
}
}
cout<<max;
return 0;
}
P.S. естественно, можно было проверять на двузначность любым другим способом.