Решение задач
Разбор задачи C2 (демо ЕГЭ 2007)
Опишите на русском языке или одном из языков программирования алгоритм поиска номера первого из двух последовательных элементов в целочисленном массиве из 30 элементов, сумма которых максимальна (если таких пар несколько, то можно выбрать любую из них).
Решение:
Программа написана на языках:
- Паскаль (среда разработки Turbo Pascal 7.0),
- Бейсик (среда разработки Quick Basic 4.5),
- Алгоритмический язык (среда разработки Кумир 1.9.0),
- Си (среда разработки Borland C++ 3.1).
Напротив названия языка программирования в скобках содержатся ссылки на скачку исходников и ехе (исполняемых файлов).
Паскаль (исходник+exe-файл) | Бейсик (исходник) |
---|---|
const N=30; var A:array[1..N] of integer; maxSum, maxNum, i: integer; begin for i:=1 to N do readln(A[i]); maxNum:=1; maxSum:=A[1]+A[2]; for i:=2 to N-1 do begin if A[i]+A[i+1]>maxSum then begin maxNum:=i; maxSum:=A[i]+A[i+1]; end end; write(char(13)+char(10)); writeln(maxNum); readln end. |
N=30 DIM i, maxSum, maxNum, A(N) AS INTEGER FOR i = 1 TO N INPUT A(i) NEXT i maxNum=1 maxSum=A(1)+A(2) FOR i = 2 TO N-1 IF A(i)+A(i+1)>maxSum THEN maxNum=i maxSum=A(i)+A(i+1) END IF NEXT i PRINT maxNum END |
Алгоритмический язык (исходник) | Си (исходник+exe-файл) |
алг нач цел N=30 целтаб A[1:N] цел i, maxSum, maxNum; нц для i от 1 до N ввод A[i] кц maxNum:=1 maxSum:=A[1]+A[2] нц для i от 2 до N-1 если A[i]+A[i+1]>maxSum то maxNum:=i maxSum:=A[i]+A[i+1] все кц вывод нс,maxNum кон |
#include <stdio.h> #include <conio.h> #define N 30 void main(void) { int A[N]; int i, maxSum, maxNum; for (i=0; i<N; i++) scanf("%d",&A[i]); maxNum=1; maxSum=A[0]+A[1]; for (i=1; i<(N-1); i++){ if(A[i]+A[i+1]>maxSum){ maxNum=i; maxSum=A[i]+A[i+1]; } } printf("\n%d",maxNum); getch(); } |
Естественный язык | |
Для хранения максимальной суммы 2-х последовательных элементов введем переменную maxSum, а для хранения индекса 1-го элемента в этой паре - переменную maxNum. Сначала в maxSum занесем сумму 1-х двух элементов, а maxNum приравняем единице. В цикле при проходе массива проверяем больше ли сумма очередной пары переменной maxSum. Если больше, то в maxSum заносим значение данной пары, а в переменную maxNum индекс 1-го элемента из данной пары. После завершения цикла переменная maxNum содержит индекс первого из двух последовательных элементов в целочисленном массиве, сумма которых максимальна. |
Пример выполнения программы на 4-х языках:
Из рисунка видно, что подряд идущие элементы со значением 12 дают максимальную сумму: 12+12=24. На рисунке первый из этих элементов выделен розовым. Его № в массиве равен 28 - для Паскаля, Бейсика и Алгоритмического языка и равен 27 - для Си, где нумерация в массиве начинается с нуля. Эти значения и вывела программа