// PascalABC.NET 3.0, сборка 1156 от 30.01.2016 begin var n,m:integer; Read(n,m); var a:array[,] of integer; SetLength(a,n,m); for var i:=0 to n-1 do for var j:=0 to m-1 do Read(a[i,j]); var k,r:integer; Read(k,r); var p:=0; //будущий результат foreach var x:integer in a do begin var s:=0; var q:=x; var k1:=0; while q<>0 do begin s:=s+(q mod 10); q:=q div 10; Inc(k1) end; if (k1=k) and (s mod r = 0) then Inc(p) end; Writeln(p) end.
// PascalABC.NET 3.0, сборка 1160 от 05.02.2016 function SHarm(m:integer):real:=Range(1,m).Select(x->1/x).Sum;
begin var a:=ReadReal('a='); var m:=1; while SHarm(m)<=a do Inc(m); Writeln('m=',m) end.
Тестовое решение: a= 5 m=83
Указанный ряд - это известный в математике расходящийся гармонический ряд. Его приближенное значение суммы можно определить по формуле Эйлера: Нам требуется определить m, для которого S(m)>a, тогда Будем искать m, отбрасывая дробную часть полученного результата, а потом делать уточнение путем непосредственного вычисления сумм.
function SHarm(m:integer):real:=Range(1,m).Select(x->1/x).Sum;
begin var a:=ReadReal('a='); var m:=1; if a<=3 then begin while SHarm(m)<=a do Inc(m); Writeln('m=',m) end else begin var s:real:=Int(exp(a-C)); if a<10 then begin m:=Trunc(s); while SHarm(m)<=a do Inc(m); Writeln('m=',m) end else Writeln('m=',s) end end.
В этом случае можно проводить оценочный расчет для больших значений а: