1. "Школьный" вариант (так учат в школах) //PascalABC.Net 3.0, сборка 1064 const n=15; var c:array[1..n] of integer; i,k:integer; sn,ap:longint; begin Randomize; Writeln('Исходный массив'); k:=0; for i:=1 to n do begin c[i]:=Random(51)-25; Write(c[i]:4); if c[i]<0 then sn:=sn+c[i] else if c[i]>0 then begin ap:=ap+c[i]; Inc(k) end end; Writeln; Writeln('Сумма отрицательных элементов равна ',sn); Writeln('Среднее арифметическое положительных элементов равно ',ap/k) end.
Тестовое решение: Исходный массив 22 15 -5 4 7 -6 24 23 -25 -21 -10 21 -11 -4 22 Сумма отрицательных элементов равна -82 Среднее арифметическое положительных элементов равно 17.25
2. Современный вариант (а так в школах почему-то не учат) //PascalABC.Net 3.0, сборка 1064 begin var c:=SeqRandom(15,-25,25); Writeln('Исходный массив'); Println(c); Writeln('Сумма отрицательных элементов равна ',c.Where(x->x<0).Sum); Writeln('Среднее арифметическое положительных элементов равно ', c.Where(x->x>0).Average) end.
Тестовое решение: Исходный массив [21,13,16,-6,-5,-21,-23,10,14,5,-14,7,-10,-9,9] Сумма отрицательных элементов равна -120 Среднее арифметическое положительных элементов равно 12.125
begin var (n, k) := ReadInteger2('n,k->'); var p := ArrGen(n, t -> t + 1); var m := new integer[k, n div k]; var sum := p.Sum div k; for var i := 0 to k - 1 do begin var m_sum := sum; m[i, 0] := p[0]; m_sum := m_sum - m[i, 0]; p := p[1:]; for var j := 1 to (n div k) - 1 do begin if m_sum - p.Last > 0 then begin m[i, j] := p.max; m_sum := m_sum - p.Max; p := p[:p.IndexMax]; end else begin if p.Where(t -> t = m_sum).Count = 1 then m[i, j] := m_sum; p := p.Where(t -> t <> m_sum).ToArray; end; end; end; var t := true; for var i := 0 to m.RowCount - 2 do if (m.Row(i).sum <> m.Row(i + 1).Sum) or (p.Length <> 0) then begin t := false; break; end; if t then m.Println else 0.Println; end.
Пример(1): n,k-> 8 2 1 8 7 2 3 6 5 4
Пример(2): n,k-> 6 3 1 6 2 5 3 4
abahtina582
08.09.2020
Program ryazantsev; var n,k,i,b,sum:integer; begin readln(n,k); sum:=trunc((1+n)/2*n); //Преобразование типа real к int, trunc можно безопасно использовать, т.к. сумма n членов арифметической последовательности целых чисел - всегда целое число if sum mod k <> 0 then writeln(0) else begin for i:=1 to k do begin b:=1; while b<n/k do begin write(i+b-1, ' ', n-i-b+2, ' '); b:=b+k end; writeln() end end; end.
Пример входных данных, при которых программа выведет ноль: 6 2
И ещё, задачка должна быть оценена явно больше, чем на пять )
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Напишите программу в массиве с(14) найти сумму отрицательных и среднее арифметическое положительных элементов.
//PascalABC.Net 3.0, сборка 1064
const
n=15;
var
c:array[1..n] of integer;
i,k:integer;
sn,ap:longint;
begin
Randomize;
Writeln('Исходный массив');
k:=0;
for i:=1 to n do begin
c[i]:=Random(51)-25;
Write(c[i]:4);
if c[i]<0 then sn:=sn+c[i]
else
if c[i]>0 then begin ap:=ap+c[i]; Inc(k) end
end;
Writeln;
Writeln('Сумма отрицательных элементов равна ',sn);
Writeln('Среднее арифметическое положительных элементов равно ',ap/k)
end.
Тестовое решение:
Исходный массив
22 15 -5 4 7 -6 24 23 -25 -21 -10 21 -11 -4 22
Сумма отрицательных элементов равна -82
Среднее арифметическое положительных элементов равно 17.25
2. Современный вариант (а так в школах почему-то не учат)
//PascalABC.Net 3.0, сборка 1064
begin
var c:=SeqRandom(15,-25,25);
Writeln('Исходный массив'); Println(c);
Writeln('Сумма отрицательных элементов равна ',c.Where(x->x<0).Sum);
Writeln('Среднее арифметическое положительных элементов равно ',
c.Where(x->x>0).Average)
end.
Тестовое решение:
Исходный массив
[21,13,16,-6,-5,-21,-23,10,14,5,-14,7,-10,-9,9]
Сумма отрицательных элементов равна -120
Среднее арифметическое положительных элементов равно 12.125