К содержанию

Анатолий
Анатольевич
Eфремов

Целочисленная арифметика

Целочисленная арифметика



Операции целочисленного деления и взятия остатка

Операция деления (/) для целых чисел всегда возвращает значение типа float, даже если делимое делится нацело на делитель. Часто бывает необходимым выполнить деление с целочисленным результатом. Для этого в Python есть специальная операция целочисленного деления, которая обозначается //. Результатом будет число, которое было бы получено в результате деления, но с отброшенной дробной частью.

Другая связанная с этим операция — это операция взятия остатка от деления, обозначаемая %.

>>>17 / 3
5.6666666666667
>>>17 // 3
5
>>>17 % 3
2

В случае отрицательных чисел операции по-разному определены в различных языках программирования. Например, в Python 3 округление по-прежнему будет производится вниз.
Например:

>>>(-17) // 3
-6
>>>(-17) % 3
1

Задача. Расписание уроков

В некоторой школе расписание составлено таким образом, что на неделе 5 учебных дней, в которые суммарно проходит n уроков. При этом количество уроков в любые два дня отличается не более чем на 1. Определите минимальное число уроков в день и количество дней, в которых уроков больше всего.

Решение

n = int(input())
print(n // 5)
print(n % 5)



Целочисленная арифметика. Примеры решения задач



Задача. Батарейки

В магазине батарейки продаются поштучно или упаковками по 4 штуки. Выгоднее покупать батарейки упаковками, чем поштучно. Вам необходимо купить ровно n батареек. Определите, сколько упаковок батареек и батареек поштучно надо купить, чтобы покупка была максимально выгодной?

Решение

n = int(input())
print(n // 4, n % 4)



Задача. Сумма цифр трехзначного числа

Дано трёхзначное число. Найдите сумму его цифр.

Решение

n = int(input())
d3 = n % 10
d2 = n // 10 % 10
d1 = n // 100
print(d1 + d2 + d3)



Задача 1

Делёж яблок

n школьников делят между собой k яблок поровну, неделящийся остаток остаётся в корзинке. Сколько яблок достанется каждому школьнику? Сколько яблок останется в корзинке?

Программа получает на вход в первой строке натуральное число n, а во второй — целое неотрицательное число k, и должна вывести два целых числа: количество яблок у каждого школьника и количество яблок, оставшихся в корзинке.

Примеры

Ввод Вывод
3
14
4 2

ОТВЕТ:
n = int(input())
k = int(input())
print(k // n, k % n)



Задача 2

Настольный теннис

Феофилакт хочет купить ракетки и шарики для игры в настольный теннис. Один комплект ракеток стоит A рублей, один шарик стоит B рублей. У Феофилакта есть C рублей, C⩾A (C больше или равно A), он покупает один комплект ракеток и шарики на оставшиеся деньги. Сколько шариков купит Феофилакт?

Программа получает на вход три целых числа: A, B, C. Программа должна вывести ответ на задачу.

Примеры

Ввод Вывод
20
10
55
3

ОТВЕТ:
a = int(input())
b = int(input())
c = int(input())
print((c - a) // b)



Задача 3

Предпоследняя цифра

Дано натуральное число. Найдите число десятков в его десятичной записи (то есть предпоследнюю цифру его десятичной записи). Если заданное число является однозначным, то необходимо вывести 0.

Примеры

Ввод Вывод
179 7

ОТВЕТ:
a = int(input())
b = a // 10
a = b % 10
print(a)



Задача 4

Сумма цифр

Дано четырёхзначное число. Найдите сумму его цифр.

Примеры

Ввод Вывод
2020 4

ОТВЕТ:
n = int(input())
d4 = n % 10
d3 = n // 10 % 10
d2 = n // 100 % 10
d1 = n // 1000
print(d1 + d2 + d3 + d4)



Задача 5

Электронные часы

С начала некоторых суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент.

На вход программе подается целое неотрицательное число n.

Программа должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59).

Примеры

Ввод Вывод
150 2 30

ОТВЕТ:
total = int(input())
hours = total // 60
mins = total % 60
print(hours, mins)



Задача 6

Цепь

Из проволоки толщиной d миллиметров сделали кольца. Внутренний радиус каждого кольца составляет R миллиметров. Всего сделали n колец и их соединили в цепь. Определите длину получившейся цепи L. На рисунке изображен пример для n = 3.

Цепь. Python

Входные данные. Программа получает на вход три числа, записанных в отдельных строчках. В первой строке задана толщина проволоки d (в миллиметрах). Во второй строке задан внутренний радиус кольца R (в миллиметрах). В третьей строке задано число звеньев n.

Выходные данные. Программа должна вывести одно целое число L—суммарную длину получившейся цепи.

Примеры

Ввод Вывод
2
10
3
64

ОТВЕТ:
d = int(input())
r = int(input())
n = int(input())
print(d * 2 + r * 2 * n)



Задача *

Стоимость покупки

Пирожок в столовой стоит a рублей и b копеек. Определите, сколько рублей и копеек нужно заплатить за n пирожков.

Программа получает на вход три числа a, b и n и должна вывести два числа: стоимость покупки в рублях и копейках.

Примеры

Ввод Вывод
10
15
2
20 30

Ввод Вывод
2
50
4
10 0

Видеоразбор

ОТВЕТ:
a = int(input())
b = int(input())
n = int(input())
price = a * 100 + b
sum = price * n
print(sum // 100, sum % 100)



Задача 7

Делёж яблок — 2

n школьников делят k яблок «почти поровну», то есть так, чтобы количество яблок, доставшихся любым двум школьникам, отличалось бы не более, чем на 1.

Программа получает на вход натуральное число n и целое неотрицательное число k, каждое в отдельной строке, и должна вывести количество школьников, которым достанется яблок меньше, чем некоторым из их товарищей.

Примеры

Ввод Вывод
7
30
5

Ввод Вывод
7
28
0

ОТВЕТ:
n = int(input())
k = int(input())
print((n - k % n) % n)



Задача *

Автопробег

За день машина проезжает n километров. Сколько дней нужно, чтобы проехать маршрут длиной m километров?

Программа получает на вход в первой строке натуральное число n и во второй строке целое неотрицательное число m.

Примеры

Ввод Вывод
700
750
2

Ввод Вывод
700
2100
3

Видеоразбор

ОТВЕТ:
n = int(input())
m = int(input())
print((m + n - 1) // n)



Задача 8

Парты

В некоторой школе решили набрать три новых математических класса и оборудовать кабинеты для них новыми партами. За каждой партой могут сидеть двое учащихся. Известно количество учащихся в каждом из трёх классов. Определите, какое наименьшее число парт, которое нужно приобрести для них. Обратите внимание, что школьники из разных классов не могут сидеть за одной партой.

Программа получает на вход три неотрицательных целых числа: количество учащихся в каждом из трёх классов, каждое в отдельной строке. Программа должна вывести ответ на задачу.

Примеры

Ввод Вывод
17
22
23
32

ОТВЕТ:
a = int(input())
b = int(input())
c = int(input())
print((a + 1) // 2 + (b + 1) // 2 + (c + 1) // 2)



Задача 9

Страницы книги

На каждой странице книги напечатано ровно k строк: на первой странице находятся строки с 1 по k, на второй — c k + 1 по 2k и т. д. Определите, на какой странице находится строка номер n и какой по счёту будет эта строка на странице.

Даны натуральные числа k и n, каждое в отдельной строке. Программа должна считать их и вывести два числа: номер страницы и номер строки на странице.

Примеры

Ввод Вывод
50
100
2 50

ОТВЕТ:
k = int(input())
n = int(input())
page = (n - 1) // k + 1
num_str = (n - 1) % k + 1
print(page, num_str)



Задача 10

Шахматная доска

Шахматная доска состоит из n x m клеток, покрашенных в чёрный и белый цвет в шахматном порядке. При этом клетка в левом нижнем углу доски покрашена в чёрный цвет. Определите, сколько всего на доске чёрных клеток.

Программа получает на вход натуральные числа n и m. Программа должна вывести ответ на задачу.

Примеры

Ввод Вывод
3
4
6

ОТВЕТ:
n = int(input())
m = int(input())
print((n * m + 1) // 2)



Задача *

Следующее чётное

Дано целое число n. Выведите следующее за ним чётное число.

Примеры

Ввод Вывод
7 8

Ввод Вывод
8 10

Видеоразбор

ОТВЕТ:
n = int(input())
print(n + 2 - n % 2)



Задача *

Симметричное число

Дано целое неотрицательное число, меньшее 10000. Если число имеет меньше 4 знаков в десятичной записи, то нужно считать, что его десятичная запись дополняется слева незначащими нулями (например, число 120 дополняется до 0120). Определите, является ли его десятичная запись симметричной. Если число симметричное, то выведите 1, иначе выведите любое другое целое число.

Примеры

Ввод Вывод
2008 37

Ввод Вывод
2002 1

Ввод Вывод
440 1

Видеоразбор

ОТВЕТ:
n = int(input())
a = n // 1000
b = n // 100 % 10
c = n // 10 % 10
d = n % 10
ad = a - d
bc = b - c
res = ad ** 2 + bc ** 2
print(res + 1)



Задача *

Максимум

Напишите программу, которая считывает два натуральных числа a и b и выводит наибольшее значение из них.

При решении задачи можно пользоваться только целочисленными арифметическими операциями +, -, *, //, %, =. Нельзя пользоваться такими конструкциями, как ветвления, циклы, функции.

Примеры

Ввод Вывод
8
5
8

Ввод Вывод
5
8
8

Ввод Вывод
5
5
5

Решение

a = int(input())
b = int(input())
u = a // b
c = (u - 1) // (u + 1) + 1;
print(c * a + (1 - c) * b)

ОТВЕТ:
a = int(input())
b = int(input())
u = a // b
c = (u - 1) // (u + 1) + 1;
print(c * a + (1 - c) * b)