В переменной s суммируются разности элементов, идущих друг за другом. Для того, чтобы s была наименьшей после выполнения программы, необходимо, чтобы разность элементов была наименьшей. Поскольку массив целочисленный, наименьшая разность равна единице. Алгоритм обрабатывает первые десять элементов массива, следовательно, наименьшее значение, которое может иметь переменная s после выполнения данной программы, равно 27 + 10 · 1 = 37. ответ: 37.
Const cdow='ВсПнВтСрЧтПтСб'; mdays:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31); var d1,m1,y,d2,m2,a,y1,m,dow,dw,i,days:integer; cdw:string; begin Writeln('Введите начало интервала (день месяц год): '); Readln(d1,m1,y); Writeln('Введите номера дня и месяца конца интервала: '); Readln(d2,m2); Writeln('Укажите, какой день недели подсчитать (Вс/Пн/Вт/Ср,Чт/Пт/Сб): '); Readln(cdw); { определить номер дня недели для начальной даты } i:=Pos(cdw,cdow); if i=0 then Writeln('Неверно указан день недели!') else begin dw:=(i-1) div 2; if m1=m2 then days:=d2-d1+1 else begin days:=days+mdays[m1]-d1+1; { до конца месяца первой даты} days:=days+d2; {плюс от начала месяца последней даты} for i:=m1+1 to m2-1 do days:=days+mdays[i] { плюс полные месяцы } end; a:=(14-m1) div 12; y1:=y-a; m:=m1+12*a-2; dow:=(7000+(d1+y1+y1 div 4-y1 div 100+y1 div 400+(31*m) div 12)) mod 7; if (d1>=28) and (m1=2) then { определить, високосный ли год } if ((y mod 4)=0) and ((y mod 100)<>0) or ((y mod 400)=0) then days:=days+1; { установлено количество дней в интервале } i:=days mod 7; days:=days div 7; if (dw>=dow) and ((dw-dow)< i) then days:= days +1; Writeln('Количество '+cdw,': ',days) end end.
Тестовое решение: Введите начало интервала (день месяц год): 12 5 2015 Введите номера дня и месяца конца интервала: 24 6 Укажите, какой день недели подсчитать (Вс/Пн/Вт/Ср,Чт/Пт/Сб): Ср Количество Ср: 7