Первый алгоритм: const n=30; var a:array[1..30] of integer; s:longint; i:integer; begin { формируем массив } Randomize; Writeln('Элементы массива:'); for i:=1 to n do begin a[i]:=Random(51)-25; Write(a[i]:4) end; Writeln; { собственно, алгоритм } s:=a[1]*a[2]; i:=3; while i<=n-1 do begin s:=s+a[i]*a[i+1]; i:=i+2 end; Writeln('Сумма пар произведений равна ',s) end.
Тестовое решение: Элементы массива: 1 10 -9 -12 -2 20 21 14 5 19 21 -14 -10 -17 5 -9 -8 17 18 11 -21 -3 -15 -10 -15 -16 -15 2 3 21 Сумма пар произведений равна 846
Второй алгоритм const n=30; var a:array[1..30] of integer; smax,imax:longint; i:integer; begin { формируем массив } Randomize; Writeln('Элементы массива:'); for i:=1 to n do begin a[i]:=Random(51)-25; Write(a[i]:4) end; Writeln; { собственно, алгоритм } smax:=a[1]+a[2]; imax:=1; for i:=2 to n-1 do if smax<a[i]+a[i+1] then begin smax:=a[i]+a[i+1]; imax:=i end; Writeln('Номер первого из пары элементов с максимальной суммой: ',imax) end.
Тестовое решение: Элементы массива: 23 13 -11 -1 -18 20 -23 1 -21 -10 7 15 -2 24 -18 -22 -13 12 -16 22 19 -14 -14 -14 19 15 8 -15 -19 -22 Номер первого из пары элементов с максимальной суммой: 20
Для этого нужно в цикле пробежаться по элементам mass[i] и элементам mass[30 - i], тоесть чтобы не запоминать суму элементов достаточно её сравнить с сумой каких либо других пар (в нашом случае начало масива мы сравниваем с концом). Далее создадим переменную, по каторой мы будем определять индекс элемента сума которого из соседним элементом являлась самой большой. Просто для проверки запускается 2 цикла в которых будет индекс инкрементироваться, Не важно в конце или в начале этот элемент. В цикле где есть этот элемент делаем проверку, найшли ли мы нужный элемент, если да, то записуем значение индекса в переменную, далее записуем проверку, на равенство индекса и переменной, что не даст нам изменить значение нужного индекса до тех пор, пока мы не найдем нужный, а индекс декрементируем, он все равно будет не изменен, по скольку в начале цыкла мы его увеличиваем на 1. Примерно все! C++ . . . int main { int mass[30]; int i,counter, j; for(i = 0,i<30;i++) {cout<<"Your mass: "<<mass[i] = rand%100<<endl; // делаем заполнение масива случайными числами от 0 до 100 } //делаем собственно проверку
for(i=0;i<30;i++) { for(j=0;j<30;j++) { if (mass[i]+mass[i+1]<mass[30-j]+mass[30-j-1]){ counter=j; j--; } else {counter = i; i--; } } cout<<"Your max element : "<<mass[counter]; } getch(); return 0;
Пусть х > 10 - это "а", а х > 2 - это "б"
Тогда получим: не (а или б)
Преобразуем по закону де Моргана, получим:
не а И не б
Если х > 10 это "а", тогда х ≤ 10 это "не а"
Если х > 2 это "б", тогда х ≤ 2 это "не б"
В результате, получаем:
х ≤ 10 И х ≤ 2
Найдем пересечение. Пересечением будет являться х ≤ 2. Таким образом, наибольшее число - 2
ответ: 2
Можно это проверить.
не (2 > 10 или 2 > 2)
не (ЛОЖЬ или ЛОЖЬ)
не ЛОЖЬ
ИСТИНА