Арифметика целых чисел

Переменные

Программы оперируют с данными. Данные хранятся в переменных — специальных областях памяти, отведенных для хранения данных. Каждая переменная имеет свой тип и должна быть объявлена перед использованием. При использовании в программе ранее не объявленной переменной компилятор выдаст сообщение об ошибке вроде

     test.cpp: In function 'int main()':
     test.cpp:5: 'c' undeclared (first use this function)
     test.cpp:5: (Each undeclared identifier is reported only once
     for each function it appears in.)

В этом сообщении указывается имя файла и номер строки, в которой обнаружена ошибка (test.cpp:5), а также описание ошибки ('c' undeclared — объект с именем 'c' не объявлен).

Объявление переменной имеет следующий вид:

<тип переменой> <один или несколько идентификаторов переменных через запятую>;

Например, переменные n и m типа int можно объявить такой строкой:

    int n, m;

Переменную x типа double можно объявить такой строкой:

    double x;

Значения переменных сразу после объявления не определены и являются произвольными. Например, если написать следующую программу:

    int a;
    cout << a;

то на экран будет выведено произвольное целое число, например, -1208725516 (так называемый "мусор").

Идентификатор переменной — это ее имя, которое должно быть последовательностью букв латинского алфавита, символа подчеркивания и цифр, начинающейся с буквы. Примеры правильных идентификаторов: а, i, Year, school179. Имена переменных чувствительны к регистру букв, то есть Number, number, NUMBER и nUMbeR — это четыре разных переменных.

Арифметические операторы

Арифметическая инструкция — это некоторое выражение, состоящее из констант, идентификаторов переменных и арифметических операторов, которая завершается точкой с запятой. Самый главный арифметический оператор — это оператор присваивания ‘=’, который присваивает одной переменной, идентификатор которой указывается слева от оператора ‘=’ значение некоторого выражения, которое стоит справа. Например:

    a = 2;
    b = a + 1;

Мы начнем с рассмотрения только целочисленных величин. Для хранения в памяти целочисленных величин как правило используются переменные типа int. С переменными типа int можно делать следующие арифметические действия:

+Сложение
-Вычитание
*Умножение
/Деление (целочисленное)
%Остаток от деления

Особого внимания заслуживает операторы деления и остатка. Деление производится нацело, с отбрасыванием целой части. Например, 10/3 это 3, 179/10 это 17, 2/5 это 0. Оператор % возвращает остаток от деления того, что записано справа на то, что записано слева. Например, 10%3 это 1, 179%10 это 9, 2%5 это 2.

В арифметическом выражении сначала выполняются слева направо все операторы умножения и деления, затем слева направо все операторы сложения и вычитания, затем справа налево все операторы присваивания. При необходимости порядок действий можно изменить при помощи скобок.

Ввод-вывод

Для того, чтобы вывести на экран значение переменной или текстовой строки нужно использовать объект “cout” и оператор “<<”, который в данном случае следует называть "Поместить в". cout — объект, связанный со стандартным выводом программы, как правило, это терминал. Для того, чтобы перейти при печати на новую строку необходимо поместить в cout стандартный объект endl.

Текстовые строки при выводе на экран необходимо заключать в двойные кавычки. Если хочется вывести на экран несколько объектов (переменных, текстовых строк и т.д.), то их нужно разделять между собой оператором ‘<<’.

Для того, чтобы считать значение переменной нужно использовать объект “cin” и оператор ‘>>’, который надо называть "Извлечь из". При этом считывание данных будет производиться со стандартного ввода программы, как правило, являющегося клавиатурой. Если хочется за одну операцию считать несколько переменных, то их идентификаторы нужно разделять между собой оператором “>>”.

Более сложный пример

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

#include <iostream>

using namespace std;

int main()
{
    int a, b, s;
    cout << "Введите два числа: ";
    cin >> a >> b;
    s = a + b;
    cout << a << "+" << b << "=" << s << endl;
    return 0;
}

Упражнения

Замечание для умных

В этом листке нельзя пользоваться условными инструкциями if, циклами for и while.

Замечание для самых умных

Также нельзя пользоваться тернарным оператором ? :, функциями abs, fabs, операциями типа == и т.д.

Пример программы на языке C для сдачи в тестирующую систему

#include <stdio.h>

int main()
{
    int a, b, s;
    scanf("%d%d", &a, &b);
    s = a + b;
    printf("%d", s);
    return 0;
}

Пример программы на языке C++ для сдачи в тестирующую систему

#include <iostream>

using namespace std;

int main()
{
    int a, b, s;
    cin >> a >> b;
    s = a + b;
    cout << s << endl;
    return 0;
}

0: Скриншот

Это задание необходимо сделать дома. Установите на компьютер среду разработки Code::Blocks с компилятором MinGW G++, запустите, напишите простую программу, скомпилируйте и запустите. Сделайте скриншот экрана, на котором видна среда Code::Blocks, исходный код программы и запущенная программа, скриншот сохраните в формате JPEG, сдайте файл в тестирующую систему.

3A: A + B

Даны два целых числа A и B. Вычислите их сумму.

Пример

Ввод Вывод
1
2
3

3B: Дележ яблок

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

Пример

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

3C: Последняя цифра

Дано натуральное число. Выведите его последнюю цифру.

Пример

Ввод Вывод
179
9

3D: Число десятков

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

Пример

Ввод Вывод
179
7

3E: Сумма цифр

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

Пример

Ввод Вывод
179
17

3F: Следующее четное

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

Пример

Ввод Вывод
7
8
8
10

3G: Шнурки

Обувная фабрика собирается начать выпуск элитной модели ботинок. Дырочки для шнуровки будут расположены в два ряда, расстояние между рядами равно \(a\), а расстояние между дырочками в ряду \(b\). Количество дырочек в каждом ряду равно \(N\). Шнуровка должна происходить элитным способом “наверх, по горизонтали в другой ряд, наверх, по горизонтали и т.д.” (см. рисунок). Кроме того, чтобы шнурки можно было завязать элитным бантиком, длина свободного конца шнурка должна быть \(l\). Какова должна быть длина шнурка для этих ботинок?

Программа получает на вход четыре натуральных числа \(a\), \(b\), \(l\) и \(N\). Программа должна выводить одно число – искомую длину шнурка.

Пример

Ввод Вывод
2
1
3
4
26

3H: Парты

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

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

Пример

Ввод Вывод
20
21
22
32

3I: Электронные часы - 1

Дано число n. С начала суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент. Программа должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59). Учтите, что число n может быть больше, чем количество минут в сутках.

Пример

Ввод Вывод
150
2 30
1441
0 1

3J: Стоимость покупки

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

Пример

Ввод Вывод
10
15
2
20 30
2
50
4
10 0

3K: Обмен значений - 1

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

Пример

Ввод Вывод
3
7
7 3

Примечание. Решением задачи не является такой код:

scanf("%d%d", &a, &b);
printf("%d%d", b, a);

4A: Обмен значений - 2

Решите предыдущую задачу без использования дополнительной переменной.

4B: Конец уроков

В некоторой школе занятия начинаются в 9:00. Продолжительность урока — 45 минут, после 1-го, 3-го, 5-го и т.д. уроков перемена 5 минут, а после 2-го, 4-го, 6-го и т.д. — 15 минут.

Дан номер урока (число от 1 до 10). Определите, когда заканчивается указанный урок. Выведите два целых числа: время окончания урока в часах и минутах.

Пример

Ввод Вывод
3
11 35
2
10 35

4C: Разность времен

Даны значения двух моментов времени, принадлежащих одним и тем же суткам: часы, минуты и секунды для каждого из моментов времени. Известно, что второй момент времени наступил не раньше первого. Определите, сколько секунд прошло между двумя моментами времени. Программа на вход получает три целых числа — часы, минуты, секунды, задающие первый момент времени и три целых числа, задающих второй момент времени. Выведите число секунд между этими моментами времени.

Пример

Ввод Вывод
1
1
1
2
2
2
3661
1
2
30
1
3
20
50

4D: МКАД

Длина Московской кольцевой автомобильной дороги —109 километров. Байкер Вася стартует с нулевого километра МКАД и едет со скоростью \(v\) километров в час. На какой отметке он остановится через \(t\) часов?

Программа получает на вход значение \(v\) и \(t\). Если \(v>0\), то Вася движется в положительном направлении по МКАД, если же значение \(v<0\), то в отрицательном.

Программа должна вывести целое число от 0 до 108 — номер отметки, на которой остановится Вася.

Пример

Ввод Вывод
60
2
11
-1
1
108

4E: Автопробег

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

Программа получает на вход числа \(n\) и \(m\).

Пример

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

4F: Дележ яблок - 3

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

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

Пример

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

4G: Улитка

Улитка ползет по вертикальному шесту высотой \(h\) метров, поднимаясь за день на \(a\) метров, а за ночь спускаясь на \(b\) метров. На какой день улитка доползет до вершины шеста?

Программа получает на вход натуральные числа \(h\), \(a\), \(b\), и должна вывести одно натуральное число. Гарантируется, что \(a>b\).

Пример

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

5A: Часы

В часах села батарейка, и они стали идти вдвое медленнее. Когда на часах было \(x_1\) часов \(y_1\) минут, правильное время было \(a_1\) часов \(b_1\) минут. Сколько времени будет на самом деле, когда часы в следующий раз покажут \(x_2\) часов \(y_2\) минут?

Программа получает на вход числа \(x_1\), \(y_1\), \(a_1\), \(b_1\), \(x_2\), \(y_2\) в указанном порядке. Все числа целые. Числа \(x_1\), \(a_1\), \(x_2\) — от 0 до 23, числа \(y_1\), \(b_1\), \(y_2\) — от 0 до 59.

Выведите два числа \(a_2\) и \(b_2\), определяющие сколько будет времени на самом деле, когда на часах будет \(x_2\) часов \(y_2\) минут.

Пример

Ввод Вывод
12
34
10
34
12
35
10 36
12
34
10
0
2
34
14 0

Тесты к этой задаче закрытые.

5B: Максимум

Напишите программу, которая считывает два целых числа \(a\) и \(b\) и выводит наибольшее значение из них. Числа — целые от 1 до 1000.

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

Пример

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

5C: Детали

Имеется \(N\) кг металлического сплава. Из него изготавливают заготовки массой \(K\) кг каждая. После этого из каждой заготовки вытачиваются детали массой \(M\) кг каждая (из каждой заготовки вытачивают максимально возможное количество деталей). Если от заготовок после этого что-то остается, то этот материал возвращают к началу производственного цикла и сплавляют с тем, что осталось при изготовлении заготовок. Если того сплава, который получился, достаточно для изготовления хотя бы одной заготовки, то из него снова изготавливают заготовки, из них—  детали и т.д.

Напишите программу, которая вычислит, какое количество деталей может быть получено по этой технологии из имеющихся исходно \(N\) кг сплава.

Программа получает на вход три натуральных числа \(N\), \(K\), \(M\), при этом \(K\ge M\), сами числа могут быть очень большими (пошаговое моделирование не получится).

Выведите одно число — количество деталей, которое может получиться по такой технологии.

Пример

Ввод Вывод
10
5
2
4
13
5
3
3
14
5
3
4
13
9
4
2
1
5
3
0

Тесты к этой задаче закрытые.