Пусть чисел в отрезке N штук. тогда сумма подряд идущих чисел, начиная с х будет равна Sum = Nx + N*(N-1)/2 здесь второе слагаемое - это частичная сумма арифметической прогрессии 0,1,2,3...N Максимальное значение N будет при нулевом x 1/2 (N - 1) N = 1014 N^2/2 - N/2 - 1014 = 0 N = 1/2 - sqrt(8113)/2 - нехороший корень N = 1/2 + sqrt(8113)/2 - а это правильный, равный 45,53 Максимальное значение x будет при N=1 x = 1014, это тривиальное решение Перебирать будем по N, просто меньше перебора Nx + N*(N-1)/2 = 1014 Nx = 1014 - N*(N-1)/2 x = 1014/N - (N-1)/2 = (2028 - N(N-1))/(2N) и проверять x на целостность
var x,n,counter:longint; begin counter:=0; for n:=1 to 45 do if (2028 - N*(N-1))mod(2*N) = 0 then begin inc(counter); x := (2028 - N*(N-1))div(2*N); writeln ('x=',x,' N=',n); end; writeln('Всего решений ',counter); end.
Так как в задании не указано, что введенное слово должно обрамляться пробелами, то код может быть такой:
var s,a:string; begin write('Введите строку : '); readln(s); write('Введите слово : '); readln(a); if(pos(a, s) <> 0) then writeln('Слово "',a,'" в строке есть') else writeln('В строке такого слова нет'); end.
Тест №1 Введите строку : Привет участникам олимпиады! Введите слово : ник Слово "ник" в строке есть
Тест №2 Введите строку : Всем привет! Введите слово : админ В строке такого слова нет
тогда сумма подряд идущих чисел, начиная с х будет равна
Sum = Nx + N*(N-1)/2
здесь второе слагаемое - это частичная сумма арифметической прогрессии 0,1,2,3...N
Максимальное значение N будет при нулевом x
1/2 (N - 1) N = 1014
N^2/2 - N/2 - 1014 = 0
N = 1/2 - sqrt(8113)/2 - нехороший корень
N = 1/2 + sqrt(8113)/2 - а это правильный, равный 45,53
Максимальное значение x будет при N=1
x = 1014, это тривиальное решение
Перебирать будем по N, просто меньше перебора
Nx + N*(N-1)/2 = 1014
Nx = 1014 - N*(N-1)/2
x = 1014/N - (N-1)/2 = (2028 - N(N-1))/(2N)
и проверять x на целостность
var
x,n,counter:longint;
begin
counter:=0;
for n:=1 to 45 do
if (2028 - N*(N-1))mod(2*N) = 0 then
begin
inc(counter);
x := (2028 - N*(N-1))div(2*N);
writeln ('x=',x,' N=',n);
end;
writeln('Всего решений ',counter);
end.
а отрезков 6
var s,a:string;
begin
write('Введите строку : ');
readln(s);
write('Введите слово : ');
readln(a);
if(pos(a, s) <> 0) then writeln('Слово "',a,'" в строке есть')
else writeln('В строке такого слова нет');
end.
Тест №1
Введите строку : Привет участникам олимпиады!
Введите слово : ник
Слово "ник" в строке есть
Тест №2
Введите строку : Всем привет!
Введите слово : админ
В строке такого слова нет