• Предмет: Информатика
  • Автор: mrargument767
  • Вопрос задан 2 года назад

Прошу помощи, пожалуйста, нужно программу на с++ перевести var
rem : array[0..11] of integer;
N, i, x : integer;
m : longint;
begin
for i := 0 to 11 do
rem[i] := 0;
readln(N);
for i := 1 to N do begin
readln(x);
inc(rem[x mod 12])
end;
m := (rem[0] * (rem[0] - 1) + rem[6] * (rem[6] - 1)) div 2;
for i := 1 to 5 do
m := m + rem[i] * rem[12 - i];
writeln(m)
end.
Дан набор из
N
натуральных чисел. Необходимо определить количество пар элементов
(
a
i
,
a
j
)
этого набора, в которых
1

i
<
j

N
и сумма элементов кратна 12.

Напишите эффективную по времени и по памяти программу для решения этой задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел
N
в
k
раз время работы программы увеличивается не более чем в
k
раз. Программа считается эффективной по памяти, если память, необходимая для хранения переменных программы, не превышает одного килобайта и не увеличивается с ростом
N
.

Описание входных и выходных данных

В первой строке входных данных задаётся количество чисел
N
(
1

N

10000
). В каждой из последующих
N
строк записано одно натуральное число, не превышающее 1000.

Пример входных данных:

5
7
5
6
12
24
Пример выходных данных для приведённого выше примера входных данных:

2
В приведённом наборе из 5 чисел имеются две пары
(
5
,
7
)
,
(
12
,
24
)
, сумма элементов которых кратна 12.

Ответы

Ответ дал: restIess
1

#include <iostream>

using namespace std;

int main() {

int rem[12];

int N, i, x;

unsigned __int64 m;

for (i = 0; i < 12; i++) {

 cin >> x;

 rem[x % 12]++;

}

m = (rem[0] * (rem[0] - 1) + rem[6] * (rem[6] - 1)) / 2;

for (i = 1; i <= 5; i++) {

 m = m + rem[i] * rem[12 - i];

}

cout << m;

return 0;

}

Вас заинтересует