Решение задач: Составители

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам


Задача 33 (№ 948) Сроки в книге (Сложность: 13%)



№

INPUT.TXT

OUTPUT.TXT

1

50 1

1 1

2

20 25

2 5

3

15 43

3 13

4

15 30

2 15
В книге на одной странице помещается K строк. Т.о., на 1-й странице печатаются строки с 1-й по K-ю, на второй — с (K+1)-й по (2∙K)-ю и т.д. Напишите программу, которая по номеру строки в тексте определяет номер страницы, на которой будет напечатана эта строка, и порядковый номер этой строки на странице.

Входные данные. Входной файл INPUT.TXT содержит число K – количество строк, которое печатается на странице, и число N – номер строки (1 ≤ K ≤ 200, 1 ≤ N ≤ 20000).

Выходные данные. В выходной файл OUTPUT.TXT выведите два числа – номер страницы, на которой будет напечатана эта строка и номер строки на странице.


#include

#include

using namespace std;

int main(){

int k, n,y,x;

cin>>k>>n;

x=n/k;

y=n%k;

if (y>0) x++;

if (y==0) y=k;

cout<
return 0; }



Вычисляем количество полных страниц.

Вычисляем номер строки.

Добавляем неполную страницу (примеры 2,3).

Учитываем вариант полностью заполненной страницы: (пример 4) – номер строки не нулевой, а равный количеству строк на странице


Задача 34 (№ 550) День программиста (Сложность: 13%)

День программиста отмечается в 255-й день года (при этом 1 января считается нулевым днем). Требуется написать программу, которая определит дату (месяц и число григорианского календаря), на которую приходится День программиста в заданном году.

В григорианском календаре високосным является:


  • год, номер которого делится нацело на 400

  • год, номер которого делится на 4, но не делится на 100

Входные данные. В единственной строке входного файла INPUT.TXT записано целое число от 1 до 9999 включительно, которое обозначает номер года нашей эры.


№

INPUT.TXT

OUTPUT.TXT

1

2000

12/09/2000

2

2009

13/09/2009
Выходные данные

В единственную строку выходного файла OUTPUT.TXT нужно вывести дату Дня программиста в формате DD/MM/YYYY, где DD — число, MM — номер месяца (01 — январь, 02 — февраль, ..., 12 — декабрь), YYYY — год в десятичной записи.

#include

#include

using namespace std;

int main(){

    int a;

cin>>a;

if((a%400==0)||(a%4==0&a%100!=0)){cout<<"12/09/";}

else {cout<<"13/09/";}

if (a<10)cout<<"000"<
if(a>=10&a<100)cout<<"00"<

if(a>=100&a<1000)cout<<"0"<

if(a>=1000)cout<

return 0; }


Если год високосный, то выводим 12/09 иначе 13/09.
Год должен содержать 4 цифры, поэтому добавляем нули.

Задача 35 (№ 794) Ролевая игра (Сложность: 15%)

Вася готовит инвентарь для ролевой игры. В игре должны принять участие n игроков, каждый из которых будет изображать персонажа фантастического мира, обладающего некоторым уровнем x, который представляет собой целое число от 1 до m. Для обозначения уровня планируется использовать специальные значки двух цветов. Белый значок обозначает один уровень, а красный значок – k уровней. Игрок, изображающий персонажа с уровнем x, должен иметь a белых значков и b красных значков, чтобы сумма (a + b*k) была равна x. При этом персонажу не разрешается иметь более чем (k – 1) белых значков.

Значки для игры готовятся заранее, однако уровни персонажей заранее неизвестны. Возникает вопрос: какое минимальное суммарное количество значков необходимо подготовить для успешного проведения игры при любых уровнях участвующих персонажей. Требуется написать программу, которая по заданным числам n, m и k вычисляет минимальное количество значков, которое необходимо подготовить для успешного проведения игры.


№

INPUT.TXT

OUTPUT.TXT

1

3 4 2

9
Входные данные
Входной файл INPUT.TXT содержит расположенные в одной строке три целых числа: n, m и k (1 ≤ n ≤ 104, 1 ≤ m ≤ 105, 1 ≤ k ≤ 105).

Выходные данные. В выходной файл OUTPUT.TXT выведите одно целое число — минимальное количество значков, которое требуется подготовить.



#include

using namespace std;

int main() {

long n,m,k;

cin >> n>>m>>k;

   if (m>k) cout <<(m/k+k-1)*n ; else сout<
return 0;

}

1 уровень – белый значок

2 уровень – красный значок

3 уровень – белый + красный

4 уровень – два красных.

Т.к. уровень заранее не известен, то нужно 3 значка (Б, К, К) чтобы гарантированно представить любой уровень.

Исключение m



Задача 36 (№ 850) Цапли (Сложность: 15%)

Петя и Маша пришли в зоопарк. Больше всего Пете понравились цапли. Он был поражен их способностью спать на одной ноге. В вольере находятся несколько цапель. Некоторые из них стоят на двух ногах, некоторые — на одной. Когда цапля стоит на одной ноге, то другую ее ногу не видно. Петя пересчитал видимые ноги всех цапель, и у него получилось число a. Через несколько минут к вольеру подошла Маша. За это время некоторые цапли могли поменять позу, поэтому Петя предложил ей заново пересчитать видимые ноги цапель. Когда Маша это сделала, у нее получилось число b. Выйдя из зоопарка, Петя с Машей заинтересовались, сколько же всего цапель было в вольере. Вскоре ребята поняли, что однозначно определить это число можно не всегда. Теперь они хотят понять, какое минимальное и какое максимальное количество цапель могло быть в вольере.

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

№

INPUT.TXT

OUTPUT.TXT

1

3 4

2 3
Входные данные
Входной файл INPUT.TXT содержит два целых числа a и b, разделенных ровно одним пробелом (1 ≤ a ≤ 109, 1 ≤ b ≤ 109).

Выходные данные


В выходной файл OUTPUT.TXT выведите два целых числа, разделенных пробелом — минимальное и максимальное число цапель, которое могло быть в вольере. Гарантируется, что хотя бы одно количество цапель соответствует условию задачи.



#include

using namespace std;

int main() {

unsigned long long a,b,max,min;

cin>>a>>b;

if(a>=b){max=a; min=b;}

else {max=b; min=a;}

if(max%2==0) max=max/2;

else max=(max/2)+1;

cout<
return 0; }


Находим мах и min

Если все цапли стоят на 1 ноге, то их количество= min.

Если цапли стоят на 2-х или одной ноге, то их количество max/2. В случае не целого ответа (1.5 цапли) прибавляем 1.


Задача 37 (№ 929) Игральные кубики (Сложность: 15%)


Юный математик Матвей интересуется теорией вероятностей, и по этой причине у него всегда есть с собой несколько стандартных шестигранных игральных кубиков. Стандартный шестигранный кубик имеет три противолежащих пары граней, которые размечены таким образом, что напротив грани с числом 1 находится грань с числом 6, напротив грани с числом 2 — грань с числом 5 и напротив грани с числом 3 — грань с числом 4.

Анализируя различные игры с шестигранными кубиками, Матвей придумал новую игру. В эту игру играют два игрока, и проходит она следующим образом: первый игрок бросает один или несколько стандартных кубиков (количество кубиков он определяет сам). После этого первому игроку начисляется количество очков, равное сумме чисел, оказавшихся на верхних гранях всех кубиков, а второму игроку — сумма чисел, оказавшихся на нижних гранях этих кубиков. Побеждает тот, кто набрал больше очков.

Например, если был брошен один кубик, и на верхней его грани выпало число два, то первый игрок получает два очка, а второй — пять. В свою очередь, если было брошено два кубика и на их верхних гранях выпало по единице, то первый игрок получает также два очка, а второй игрок – двенадцать очков, так как на нижних гранях этих кубиков оказались шестерки.

Матвей рассказал об этой игре своему другу, юному информатику Фоме, и они начали играть в неё через Интернет. Поскольку Фома не видит результат броска и не знает, сколько кубиков бросает Матвей как первый игрок, то о набранных каждым игроком очках он узнает только от Матвея. Чтобы проверить достоверность этой информации, Фома решил узнать, какое минимальное и максимальное количество очков мог получить он, если известно, сколько очков набрал Матвей.
Источник: https://tut-files.ru/previewfile/107733