Целые числа.
Задача A. Кролики
Пусть есть n клеток и m зайцев, которых рассадили по этим клеткам. Вам требуется расcчитать максимальное количество зайцев, которое гарантированно окажется в одной клетке (по принципу Дирихле).
В первой строке входного файла записаны два натуральных числа n и m. (1 ≤ n, m ≤ 109).
- int n, m, count = 0;
- cin >> n >> m;
-
- count = m / n;
- m %= n;
- if (m)
- count++;
- cout << count;
* This source code was highlighted with Source Code Highlighter.
Задача 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&1)
- return (n+1)/2*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 << s;
- return 0;
- }
* This source code was highlighted with Source Code Highlighter.
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 << "It is " << h << " hours " << m << " minutes.";
* This source code was highlighted with Source Code Highlighter.
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 << "It is " << h << " hours " << m << " minutes.";
* This source code was highlighted with Source Code Highlighter.
Задача 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 << page << ' ' << line;
* This source code was highlighted with Source Code Highlighter.
Задача 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 << s2 - s1;
* This source code was highlighted with Source Code Highlighter.