Дана последовательность натуральных чисел. Необходимо найти максимально возможную сумму её непрерывной подпоследовательности, в которой количество нечётных элементов кратно k = 10.
Входные данные.
Первая строка входного файла содержит целое
Вам даны два входных файла
Ответ:
Будем последовательно считывать числа из файла.
Приведём решение задачи на языке Pascal.
var
i, n, num, count, d: integer;
sum, maxsum: int64;
lefts: array[0..9] of int64;
rights: array[0..9] of int64;
f: text;
begin
assign(f,'C:\27-B.txt');
reset(f);
readln(f, n);
for i := 0 to 9 do begin
lefts[i] := 0;
rights[i] := 0;
end;
count := 0;
sum := 0;
for i := 1 to n do begin
readln(f, num);
sum := sum + num;
if num mod 2 = 1 then count := count + 1;
d := count mod 10;
if lefts[d] = 0 then lefts[d] := sum;
rights[d] := sum;
end;
maxsum := 0;
if count mod 10 = 0 then writeln(sum)
else for i := 0 to (count mod 10) do begin
if (rights[i] - lefts[i]) > maxsum then maxsum := rights[i] - lefts[i];
end;
if rights[0] > maxsum then maxsum := rights[0];
writeln(maxsum);
end.
В результате работы данного алгоритма при вводе данных из
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение на языке Python.
f = open("27-B.txt")
n = int(f.readline())
lefts = [0 for i in range(10)]
rights = [0 for i in range(10)]
for i in range(10):
lefts[i] = 0
rights[i] = 0
count = 0
sum = 0
for i in range(1, n + 1):
num = int(f.readline())
sum = sum + num
if num % 2 == 1:
count = count + 1
d = count % 10
if lefts[d] == 0:
lefts[d] = sum
rights[d] = sum
maxsum = 0
if count % 10 == 0:
print(sum)
else:
for i in range(count % 10 + 1):
if (rights[i] - lefts[i]) > maxsum:
maxsum = rights[i] - lefts[i]
if rights[0] > maxsum:
maxsum = rights[0]
print(maxsum)
Приведём решение Бориса Савельева на языке Python.
f=open('27-B.txt')
n=int(f.readline())
a=[]
k=[]
maxi=0
for i in f:
if int(i)%2!=0:
k.append(len(a))
a.append(int(i))
if len(k)%10==0:
print(sum(a))
else:
for i in range (0,len(k)%10+1):
if i==0:
maxi=max(sum(a[:k[-(len(k)%10)]]),maxi)
elif i==len(k)%10:
maxi = max(sum(a[k[i]:]), maxi)
else:
maxi = max(sum(a[k[i]:k[i-(len(k)%10)]]), maxi)
print(maxi)

