На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны.
Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре не важен). Необходимо определить количество пар, для которых произведение элементов не делится на 34.
Описание входных и выходных данных
В первой строке входных данных задаётся количество чисел N (1≤N≤1000).
В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать одно число: количество пар, в которых произведение элементов не кратно 34.
Пример входных данных:
5
3
4
10
11
17
Пример выходных данных для приведённого выше примера входных данных:
8
Пояснение. Из заданных чисел можно составить 10 попарных произведений: 3·4, 3·10, 3·11, 3·17, 4·10, 4·11, 4·17, 10·11, 10·17, 11·17 (результаты: 12, 30, 33, 51, 40, 44, 68, 110, 170, 187). Из них на 34 не
7.4 Количество пятерок. «Поколение Python»: курс для начинающих. Курс Stepik
делятся 8 произведения (3·4=12, 3·10=30, 3·11=33, 3·17=51, 4·10=40, 4·11=44, 10·11=110, 11·17=187).
Требуется написать эффективную по времени и по памяти программу для решения описанной задачи.
Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз.
Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 Кбайт и не увеличивается с ростом N.
Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и по памяти, – 4 балла.
Максимальная оценка за правильную программу, эффективную только по времени – 3 балла.
Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, – 2 балла
Решение:
Программа на языке Pascal. (4б)
Источник: informatikaexpert.ru
На вход программе подается последовательность целых чисел каждое число на отдельной строке
Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
Наши условия использования и конфиденциальности
Public user contributions licensed under cc-wiki license with attribution required
Источник: stepik.org
Решение задач на С++
Задача A. Кролики
Пусть есть n клеток и m зайцев, которых рассадили по этим клеткам. Вам требуется расcчитать максимальное количество зайцев, которое гарантированно окажется в одной клетке (по принципу Дирихле).
В первой строке входного файла записаны два натуральных числа n и m. (1 ≤ n, m ≤ 10 9 ).
- int n, m, count = 0;
- cin >> n >> m;
- count = m / n;
- m %= n;
- if (m)
- count++;
- cout
Задача B. Сумма от 1 до N
Сумму всех целых чисел от 1 до 100 можно посчитать при помощи хитрого приема.
Разобьем все числа по парам 1 и 100, 2 и 99, 3 и 98 и т.д. Сумма каждой пары 101. Пар всего 100 пополам (50). Поэтому сумма равна
Дано одно целое число N. Гарантируется, что ответ «помещается» в тип long long (в Си). Найти сумму всех целых чисел от 1 до N.
- long long sum_modul( long long n)
- if (n
- else
- return n/2*(n+1);
- >
- int main()
- freopen( «input.txt» , «r» ,stdin);
- freopen( «output.txt» , «w» ,stdout);
- long long n, s;
- cin >> n;
- if (n > 0)
- s = sum_modul(n);
- else
- s = -sum_modul(-n) + 1;
- cout
- return 0;
- >
P.S.
1) Важно заметить, что в условии задачи гарантируется, что лишь ответ помещается в тип long long. А на промежутчные вычисления такой гарантии не дается, поэтому в функции sum_modul формулу подсчета стоит модифицировать так, чтобы сначала происходило деление на 2, а только потом умножение. Таким образом мы предохраняемся от переполнения типа. Целочисленно делить на 2 без потерь, конечно, нужно четное число, поэтому заранее проверяем в строке 3, что является четным: само значение n или n+1.
2) Второй подводный камень условия – нет гарантии исключения отрицательности конечного значения N. Поэтому в строках 16 и 18 учитываем особенности знака.
Задача C. k-я секунда суток
Идёт k-я секунда суток. Определите, сколько целых часов h и целых минут m прошло с начала суток.
На вход программе подается целое число k (0 ≤ k ≤ 86399). Выведите на экран фразу:
It is . hours . minutes.
Вместо многоточий программа должна выводить значения h и m, отделяя их от слов ровно одним пробелом.
- int s, h, m;
- cin >> s;
- s—;
- h = s / 3600;
- m = (s % 3600)/ 60;
- cout
P.S. Нужно обратить внимание, что в условии задачи просится найти сколько прошло полных часов и минут, т.е. если идет 60-ая секунда, то это значит, что прошло полных только 59 секунд, но никак не минута. Поэтому первым делом в 3-ей строке кода избавляемся от “идущей” незавершившейся секунды: s — .
Задача D. Часовая стрелка
Часовая стрелка повернулась с начала суток на d градусов. Определите, сколько сейчас целых часов h и целых минут m. На вход программе подается целое число d (0 ≤ d < 360). Выведите на экран фразу:
It is . hours . minutes.
Вместо многоточий программа должна выводить значения h и m, отделяя их от слов ровно одним пробелом.
- int d, m, h;
- cin >> d;
- m = d * 2;
- h = m / 60;
- m %= 60;
- cout
Задача E. Без циклов
В книге на одной странице помещается k строк. Таким образом, на 1-й странице печатаются строки с 1-й по k-ю, на второй — с (k+1)-й по (2k)-ю и т. д. Напишите программу, по номеру строки в тексте определяющую номер страницы, на которой будет напечатана эта строка, и порядковый номер этой строки на странице.
На вход программе подаются число k — количество строк на странице и число n — номер строки в тексте (1 ≤ k ≤ 200, 1 ≤ n ≤ 20000).
- int k, n, page, line;
- cin >> k >> n;
- page = (n — 1) / k + 1;
- line = (n — 1) % k + 1;
- cout
Задача F. Два момента времени
Даны значения двух моментов времени, принадлежащих одним и тем же суткам: часы, потом минуты и секунды для каждого из моментов времени. Известно, что второй момент времени наступил не раньше первого. Определите, сколько секунд прошло между двумя моментами времени.
В первой строке входных данных находятся три целых числа — часы, минуты и секунды первого момента времени. Во второй строке — три числа, характеризующие второй момент времени. Число часов лежит в диапазоне от 0 до 23, число минут и секунд — от 0 до 59.
- int h1, m1, s1;
- cin >> h1 >> m1 >> s1;
- int h2, m2, s2;
- cin >> h2 >> m2 >> s2;
- s1 = s1 + m1*60 + h1*3600;
- s2 = s2 + m2*60 + h2*3600;
- cout
Источник: cpptasksolver.blogspot.com