В файле содержится последовательность из 10 000 натуральных чисел. Каждое число не превышает 10 000. Определите и запишите в ответе сначала количество пар элементов последовательности, у которых различные остатки от деления на d = 160 и хотя бы одно из чисел делится на p = 7, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.
Пример входных данных:
168
7
320
328
Пример выходных данных для приведённого выше примера входных данных:
4 488
Пояснение. Из
Ответ:
Сначала считаем все числа из файла в массив. Для каждой пары будем проверять, делится ли хотя бы одно число из пары
Приведём решение задачи на языке Pascal.
var
i, j: integer;
count: longint;
maxsum: integer;
arr: array[1..10000] of integer;
f: text;
begin
assign(f,'C:\17.txt');
reset(f);
maxsum := 0;
count := 0;
for i := 1 to 10000 do readln(f, arr[i]);
for i := 1 to 10000 - 1 do
for j := i + 1 to 10000 do begin
if (arr[i] mod 7 = 0) or (arr[j] mod 7 = 0) then
if (arr[i] mod 160 <> arr[j] mod 160) then begin
count := count + 1;
if arr[i] + arr[j] > maxsum then maxsum := arr[i] + arr[j];
end;
end;
writeln(count, ' ', maxsum);
end.
В результате работы данного алгоритма при вводе данных из файла ответ — 12749665 19989.
Приведём решение задачи на языке Python.
f = open('17.txt')
a = [int(i) for i in f]
s = 0
mx = 0
for i in range(len(a) - 1):
for j in range(i + 1, len(a)):
if (a[i] % 160 != a[j] % 160) and ((a[i] % 7 == 0) or (a[j] % 7 == 0)):
s += 1
mx = max(mx, a[i] + a[j])
print(s, mx)
В результате работы данного алгоритма при вводе данных из файла ответ — 12749665 19989.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Артёма Гридина на языке Python.
from itertools import combinations
f = open('17.txt')
numbers = map(int, f.readlines())
cnt = 0
maxsum = 0
for para in combinations(numbers, 2):
if (para[0]%7 == 0 or para[1]%7 == 0) and para[0]%160 != para[1]%160:
cnt+=1
maxsum = max(maxsum, para[0]+para[1])
print(cnt, maxsum)
В результате работы данного алгоритма при вводе данных из файла ответ — 12749665 19989.
Приведём решение Сергея Донец на языке PascalABC.NET.
begin
var (d,p) := (160,7);
var t := ReadAllText('17.txt').ToIntegers
.Combinations(2)
.Where(\(a,b)->((a mod d)<>(b mod d)))
.Where(\(a,b)->(a mod p=0)or(b mod p=0));
Print(t.Count, t.Select(\(a,b)->a+b).Max);
end.

