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