---PascalABC.NET 3.6.2 ---
begin
//Создадим переменную A типа List<integer>, задав в конструкторе ёмкость в 20 элементов;
var A : List<integer> := New List<integer>(20);
A.AddRange(SeqGen(A.Capacity, p -> Random(-10, 10))); //Запишем в наш List последовательность, длина которой равна List<T>.Capacity, и каждый элемент в которой генерируется случайно в диапазоне [-10; 10]
A.Println; //Распечатаем в консоль содержимое A
end.
Объяснение:
Заместо стандартного паскалевского массива использован класс List<T> библиотеки .NET Framework, являющийся аналогом обычного массива, но имеющий большее число методов для работы с ним.
А вообще, программа может быть написана в 1 строку:
begin
ArrRandom(20, -10, 10).Println;
end.
тогда сумма подряд идущих чисел, начиная с х будет равна
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