На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре не важен). Необходимо определить количество пар, для которых произведение элементов делится на 26 или на 33.
!!!Моя программа работает, но не для всех случаев. Подскажите пожалуйста! Как исправить?
var i, x, n, k2, k3, k11, k13, k26, k33, S: integer;
begin
readln(n);
for i:=1 to n do begin
readln(x);
if (x mod 33>0) and (x mod 26>0) then
begin
if (x mod 2 =0) and (x mod 13>0) then k2:=k2+1;
if (x mod 13 =0) and (x mod 2>0) then k13:=k13+1;
if (x mod 3 =0) and (x mod 11>0) then k3:=k3+1;
if (x mod 11 =0) and (x mod 3>0) then k11:=k11+1;
end;
if (x mod 26=0) then k26:=k26+1;
if (x mod 33=0) then k33:=k33+1;
end;
S:=k2*k13+k26*(n-k26-k33)+k26*(k26-1)div 2+k3*k11+k33*(n-k33-k26)+k33*(k33-1)div 2;
writeln(S);
end.
Другие языки программирования и технологии
ПАСКАЛЬ. Необходимо определить количество пар, для которых произведение элементов делится на 26 или на 33.
У тебя есть 10 вариантов делителей:
26 = 2 * 13
33 = 3 * 11
143 = 13 * 11
39 = 13 * 3
22 = 11 * 2
6 = 2 * 3
13
11
3
2
Ты же рассматриваешь только 6 вариантов.
А дубли убираются обработкой делителей сверху вниз.
if (x mod 26 = 0) or (x mod 33 = 0) then inc(kFull)
else if x mod 143 = 0 then inc(k143)
else if x mod 39 = 0 then inc(k39)
else if x mod 22 = 0 then inc(k22)
else if x mod 6 = 0 then inc(k6)
else if x mod 13 = 0 then inc(k13)
else if x mod 11 = 0 then inc(k11)
else if x mod 3 = 0 then inc(k3)
else if x mod 2 = 0 then inc(k2);
s := kFull * (kFull - 1) div 2 + kFull * (n - kFull) + k143 * (k39 + k22 + k6 + k3 + k2) +
k39 * (k22 + k6 + k11 + k2) + k22 * (k6 + k13 + k3) + k6 * (k11 + k13) + k13 *k2 + k11 * 3;
26 = 2 * 13
33 = 3 * 11
143 = 13 * 11
39 = 13 * 3
22 = 11 * 2
6 = 2 * 3
13
11
3
2
Ты же рассматриваешь только 6 вариантов.
А дубли убираются обработкой делителей сверху вниз.
if (x mod 26 = 0) or (x mod 33 = 0) then inc(kFull)
else if x mod 143 = 0 then inc(k143)
else if x mod 39 = 0 then inc(k39)
else if x mod 22 = 0 then inc(k22)
else if x mod 6 = 0 then inc(k6)
else if x mod 13 = 0 then inc(k13)
else if x mod 11 = 0 then inc(k11)
else if x mod 3 = 0 then inc(k3)
else if x mod 2 = 0 then inc(k2);
s := kFull * (kFull - 1) div 2 + kFull * (n - kFull) + k143 * (k39 + k22 + k6 + k3 + k2) +
k39 * (k22 + k6 + k11 + k2) + k22 * (k6 + k13 + k3) + k6 * (k11 + k13) + k13 *k2 + k11 * 3;
и сдесь ахинея (
Оксана Ильмекова
может тогда поможете?
Похожие вопросы
- №1.Как вычислить произведение элементов массива(1..5)В Паскале=)))№2.Найти наименьший элемент в массиве!Тоже в Паскале)
- Ввести 10 элементов в массив с клавиатуры, и определите количество элементов, которые кратный 5.
- Помогите с С++. Надо найти произведение элементов одномерного массива между первым и последним 0.
- Дан двумерный массив C(m,n). Найти произведение элементов, больших среднего значения. Помогите пожалуйста!!! На паскале
- Напишите пожалуйста программу в паскале. Дана строка символов,определить количество слов,начинающихся с заданного символа
- Дано натуральное число. Определить количество его цифр, кратных z. Написать в Паскаль
- Определить является ли кол-во положительных элементов массива числом чётных
- Помогите написать программу. Дано натуральное 5-значное число n.Определить равны ли сумма и произведение его цифр.
- Написать функцию, вычисляющую произведение элементов массива, расположенных между первым и вторым нулевым элементам
- найти произведение элементов массива, расположенных после максимального по модулю элемента
15
3
4
33
11
17
26
51
39
8
52
6
858
1716
143
66
Sample Output:
82
Твой код выводит 83 вместо 82, сам не очень понял из-за чего, вроде всё верно.