ВУЗ: Не указан

Категория: Решение задач

Дисциплина: Не указана

Добавлен: 17.03.2024

Просмотров: 305

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Составители:

Ильина Е.А,

Волынская О.С,

учителя информатики КГУ «Гимназия №9» г.Караганды

Линейные алгоритмы

Задача 1 (№ 1) A+B (Сложность: 1%)

Входные данные. В единственной строке входного файла INPUT.TXT записано два натуральных числа через пробел, не превышающих 109.

Выходные данные. В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел А и В.

Задача 3 (№ 903) Бисер (Сложность: 2%)

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

Задача 4 (№ 942) Олимпиада (Сложность: 2%)

Задача 5 (№ 195). Эния (Сложность: 3%)

Задача 7 (№ 33) Два бандита ( Сложность: 4%)

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

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

Задача 10 (№ 819) Прямоугольный параллелепипед

(Сложность: 10%)

     x=(h*(l+w)*2)/16; нужно учесть, что банка может быть неполной

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

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

Задача 14 (№ 780) Футбол (Сложность: 22%)

Выходные данные. В выходной файл OUTPUT.TXT выведите одно число – общее количество забитых мячей.

2 способ

Задача 15 (№ 900) Три грибника (Сложность: 23%)

Разветвляющиеся алгоритмы

Задача 16 (№ 25) Больше-меньше (Сложность: 3%)

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

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

Задача 19 (№ 8)Арифметика (Сложность: 5%)

Задача 21 (№ 755) Сбор земляники (Сложность: 6%)

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

Выходные данные. В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число – через сколько часов зазвонит будильник.

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

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

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

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

Входные данные. Входной файл INPUT.TXT содержит одно натуральное число n — количество очков, которые получил первый игрок (n ≤ 1010).

Задача 38 (№ 263) Метро (Сложность: 16%)

Задача 39 (№ 844) Поля (Сложность: 16%)

Входные данные. Входной файл INPUT.TXT содержит целые числа a и b – длины сторон прямоугольника (1 < = a*b ≤ 1014).

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

Задача 40 (№ 294) Болты и гайки (Сложность: 17%)

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

Выходные данные. В выходной файл выведите одно целое число – размер ущерба.

Задача 41 (№ 606)Треугольник – 3 (Сложность: 17%)

Задача 42 (№ 952) В автобусе (Сложность: 18%)

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

Задача 43 (№ 952) Кастинг (Сложность: 19%)

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

1, если в данном тесте требуется определить минимальное количество актеров;

Вторая строка входного файла содержит разделенные пробелами четыре целых числа: n, a, b, с (1 ≤ n ≤ 10 000, 0 ≤ a ≤ n, 0 ≤ b ≤ n, 0 ≤ c ≤ n).

Задача 45 (№ 68) Дом - Школа – Дом (Сложность: 21%)

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

Задача 49 (№ 692) Бинарные числа (Сложность: 8%)

Задача № 52 (№ 233). Автобусная экскурсия (Сложность: 14%)

Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.

Задача 55 (№ 264) Оттепель(Сложность: 17%)

Задача 56 (№ 949) Фибоначчиева последовательность. (Сл.17%)

Задача 57 (№ 778) Офис (Сложность: 18%)

Задача 60 (№ 947) Карточки – 3 (Сложность: 22%)

Входные данные. Входной файл INPUT.TXT содержит единственное положительное число X - длина нависающей части. Число X задано с двумя знаками после запятой и 0.01 ≤ x < 10.00.

Задача 62 (№ 716) Треугольник Максима (Сложность: 25%)

Задача 63 (№ 272) Сумма max и мin (Сложность: 26%)

Массивы

Задача 66 (№ 149). Разворот (Сложность: 9%)

Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.

Задача 69 (№ 637) NEERC (Сложность: 17%)

Задача 70 (№ 293) Налоги (Сложность: 20%)

Выходные данные. В выходной файл выведите одно число - номер фирмы, от которой государство получает наибольший налог. Если таких фирм несколько, выведите фирму с наименьшим номером.

Строки

Задача 74 (№ 324) Четырехзначный палиндром ( Сл.: 10%)

Задача 80 (№ 43) Нули (Сложность: 16%)

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

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

Задача 81 (№ 297) Кругляши (Сложность: 16%)

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

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

Задача 83 (№ 895) Крестики-нолики (Сложность: 19%)

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

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

Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.

Задача 87 (№ 633) ACM World Finals (Сложность: 20%)

Задача 89 (№ 315) Наименьшая система счисления (Сл.: 26%)

Задача 90 (№ 277) Школьная алгебра (Сложность: 27%)

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

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

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


#include

using namespace std;

int main () {

int k, w, a1, a2, a3, b1, b2, b3;

cin >> k >> w;

cin >> a1 >> b1 >> a2 >> b2 >> a3 >> b3;

Проверяем, можно ли использовать 2 палатки


if (a1+a2<=w & b1+b2>=k){cout << "YES"; return 0;}

if (a1+a3<=w & b1+b3>=k){cout << "YES"; return 0;}

if (a2+a3<=w & b2+b3>=k){cout << "YES"; return 0;}

Проверяем, можно ли использовать 3 палатки

if (a1+a2+a3<=w & b1+b2+b3 >= k){cout << "YES";

return 0; }


Проверяем, можно ли использовать 1 палатку

if (a1<=w & b1>=k) {cout << "YES";return 0;}

if (a2<=w & b2>=k) {cout << "YES"; return 0;}

if (a3<=w & b3>=k) {cout << "YES"; return 0;}
cout << "NO";

return 0; }
Задача 47 (№ 667) Автобусы – 2 (Сложность: 28%)




INPUT.TXT

OUTPUT.TXT

1

10 4 7

2

2

10 4 5

0
Для заезда в оздоровительный лагерь организаторы решили заказать автобусы. Известно, что в лагерь собираются поехать N детей и M взрослых. Каждый автобус вмещает K человек. В каждом автобусе, в котором поедут дети, должно быть не менее двух взрослых. Определите, удастся ли отправить в лагерь всех детей и взрослых, и если да, то какое минимальное количество автобусов требуется для этого заказать.

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


В единственной строке входного файла INPUT.TXT записано через пробел 3 натуральных числа - N, M и K, каждое из них не превосходит 10 000.

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


В единственную строку выходного файла OUTPUT.TXT нужно вывести количество автобусов, которые нужно заказать. Если же отправить всех в лагерь невозможно, выведите 0 (ноль).


#include

using namespace std;

int main () {

long d, w, a, ka;

cin>> d >> w>>a;

if (a<=2 and d>0) ka=0;
else {

ka=d/(a-2);

if (d%(a-2)!=0) ka++;
if (ka*2>w) ka=0;

else {ka=(d+w)/a;

if ((d+w)%a!=0) ka++;}

}

cout << ka;

return 0; }






Поездка невозможна, если автобусы будут вмещать 1 или 2 чел.
Находим, сколько автобусов нужно для детей (+1 автобус может быть не полный)
Проверяем, есть ли у нас нужное число взрослых.

Взрослых может быть больше, чем по 2 на каждый автобус, поэтому

количество автобусов=

Добавляем неполный автобус


Циклические алгоритмы


Задача 48 (№ 106) Монетки (Сложность: 8%)





INPUT

OUTPUT

1

5
1
0
1
1
0

2
На столе лежат n монеток. Некоторые из них лежат вверх решкой, а некоторые – гербом. Определите минимальное число монеток, которые нужно перевернуть, чтобы все монетки были повернуты вверх одной и той же стороной.

Входные данные. В первой строке входного файла INPUT.TXT записано натуральное число N (1 <= N <= 100) – число монеток. В каждой из последующих N строк содержится одно целое число – 1 если монетка лежит решкой вверх и 0 если вверх гербом.

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


Считаем количество 0 и 1; выводим наименьшее из них


#include

using namespace std;

int main (){

    int n,i,a0,b1,x;

    cin>>n;

    a0=0;

    b1=0;

    for (i = 1; i<=n; i++){

        cin>>x;

        if (x==0) (a0++);

        if (x==1) (b1++);

        }

    if (a0>b1) cout<
    return 0; }

Задача 49 (№ 692) Бинарные числа (Сложность: 8%)


Говорят, что плохой программист – это тот, кто считает, что в одном килобайте 1000 байт, а хороший программист – это тот, кто полагает, что в одном километре 1024 метра. Многим эта шутка понятна, так как все знают, что в процессах, связанных с информатикой и компьютерной техникой, фигурирует множество значений, выражаемых степенью двойки, то есть чисел вида 2K, где K – некоторое неотрицательное целое число. Назовем такие числа бинарными. Это такие числа как 2, 4, 8, 16, 32 и т.д. Действительно, когда речь идет о размере памяти или о разрешении экрана монитора, то мы часто наталкиваемся на бинарные числа. Все это связано с принципом хранения информации в памяти ЭВМ.

Задано целое число N. Требуется определить, является ли оно бинарным.

Входные данные. Входной файл INPUT.TXT содержит единственное целое число N, не превосходящее 10000 по абсолютной величине.

Выходные данные. В выходной файл OUTPUT.TXT выведите YES, если заданное число является бинарным, и NO в противном случае.



INPUT.TXT

OUTPUT

1

1024

YES

2

23

NO
#include

#include

using namespace std;

int main (){

int a;

cin>>a;

while (a%2==0 && a>1){a=a/2;}

if (a==1) cout<<"YES"; else cout<<"NO";

return 0; }

Задача 50 (№ 35) Конечные автоматы ( Сложность: 11%)





INPUT.TXT

OUTPUT

1

4
2 0
13 20
5 23
18 6

44344
48134
45699
49458

1

2
15 20
1000 26000

48767
1340237
Однажды известный профессор обнаружил описания k конечных автоматов. По его мнению, нетривиальность конечного автомата, имеющего n состояний и m переходов, можно описать целым числом d = 19m + (n + 239)*(n + 366) / 2 . Чем больше d, тем больший интерес для науки представляет изучение его свойств. Помогите профессору вычислить нетривиальность имеющихся у него автоматов.
Входные данные. Первая строка входного файла INPUT.TXT содержит целое число k (1 ≤ k ≤ 10000) – количество конечных автоматов. Следующие k строк содержат по два целых числа ni (0 ≤ ni ≤ 1000) и mi (0 ≤ mi ≤ 26ni2) – число состояний и переходов i-го автомата.

Выходные данные. Выходной файл OUTPUT.TXT должен состоять из k строк. На i-й строке выходного файла выведите одно число – нетривиальность i-го автомата.



#include

using namespace std;

int main(){

long long int k,m,n;

int d;

cin>>k;

for(int i=0;i
cin>>n>>m;

d= 19*m + (n + 239)*(n + 366) / 2;

cout<
return 0; }


Задача 51 (№ 81) Арбузы (Сложность: 14%)


Иван Васильевич пришел на рынок и решил купить 2 арбуза: один для себя, а другой для тещи. Понятно, что для себя нужно выбрать арбуз потяжелей, а для тещи полегче. Но вот незадача: арбузов слишком много и он не знает, как же выбрать самый легкий и самый тяжелый арбуз? Помогите ему!

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

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

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

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




INPUT

OUTPUT

1

5
5 1 6 5 9

1 9
# include

using namespace std;

int main () {

int n, max, i, min, ves;

cin>>n;

max=0; min=30001;

for (i = 1; i <=n; i++){

cin>>ves;

if (ves>max) (max=ves);

if (ves
cout<
return 0; }


Задача № 52 (№ 233). Автобусная экскурсия (Сложность: 14%)


Оргкомитет Московской городской олимпиады решил организовать экскурсию по Москве для участников олимпиады. Для этого был заказан двухэтажный автобус высотой 437 см. На экскурсионном маршруте встречается N мостов. Оргкомитет олимпиады очень обеспокоен тем, что высокий двухэтажный автобус может не проехать под одним из них. Им удалось выяснить точную высоту каждого из мостов. Автобус может проехать под мостом тогда и только тогда, когда высота моста превосходит высоту автобуса. Помогите организаторам узнать, можно ли провести эту экскурсию, а если нет, установите, под каким мостом автобус не сможет проехать.

Формат входных данных. Первая строка содержит число N (1≤ N≤1000). Далее идут N натуральных чисел, не превосходящих 1000, - высоты мостов в сантиметрах в том порядке, в котором они встречаются на пути автобуса.




INPUT.TXT

OUTPUT

1

1
763

No crash

2

3
763 245 113

Crash 2

3

1
437

Crash 1
Формат выходных данных. В единственную строку выходного файла нужно вывести фразу «No crash», если экскурсию можно провести. Если же экскурсию провести нельзя, то нужно вывести сообщение «Crash k», где k-номер первого из мостов, под которым автобус не сможет проехать.

#include

using namespace std;

int main (){

    int k,n,i,b,f;

    cin>>n;

    f=0;

    for (i = 1; i<=n; i++){

Считаем количество мостов k, под которыми проедет автобус.

        cin>>b;

        if (b>437) f++;     

else {

        cout<<"Crash "<
        }

        if (f==n) cout<<"No crash";

    return 0; }

Задача 53 (№ 131) Перепись (Сложность: 15%)


В доме живет N жильцов. Однажды решили провести перепись всех жильцов данного дома и составили список, в котором указали возраст и пол каждого жильца. Требуется найти номер самого старшего жителя мужского пола.

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

Во входном файле INPUT.TXT в первой строке задано натуральное число N – количество жильцов (N<=100). В последующих N строках располагается информация о всех жильцах: каждая строка содержит два целых числа: V и S – возраст и пол человека (1<=V<=100, S – 0 или 1). Мужскому полу соответствует значение S=1, а женскому – S=0.




INPUT.TXT

OUTPUT.TXT

1

4
25 1
70 1
100 0
3 1

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

Выходной файл OUTPUT.TXT должен содержать номер самого старшего мужчины в списке. Если таких жильцов несколько, то следует вывести наименьший номер. Если жильцов мужского пола нет, то выведите -1.
#include

#include

using namespace std;

int main (){

    int n,v,s,i,c,max;

    cin>>n;

    max=0;

    for (i = 1; i<=n; i++){

        cin>>v>>s;

  if (s==1 && v>max) (max=v, c=i);  }

    if (max==0) cout<<-1;     else cout<
    return 0; }


Задача 54 (№ 818) Кипячение чая (Сложность: 14%)


В эту субботу у Васи день рождения и через 15 минут к нему придут гости. Ему срочно надо вскипятить чай, для того чтобы напоить им гостей. У Васи дома есть много литровых чайников (можно считать, что их бесконечное количество), а розетка всего одна. Т.к. вода кипятится очень долго, за 15 минут она успеет вскипятиться максимум один раз. Но Вася – мальчик не промах, он достал из кладовки N тройников, в i-том тройнике ai разъемов. Теперь Вася ломает голову: как ему соединить тройники и воткнуть эту систему в розетку, чтобы максимизировать количество чайников, которые он сможет поставить кипятить.




INPUT.TXT

OUTPUT.TXT

1

1
1

1

2

3
2 5 4

9
Ваша задача заключается в написании программы, которая определит максимальное число чайников, которые возможно использовать для кипячения чая, используя данные тройники.
Входные данные. В первой строке входного файла INPUT.TXT содержится число N (1 ≤ N ≤ 105) – количество тройников. Во второй строке через пробел перечислены числа ai (1 ≤ ai ≤ 1000, 1 ≤ i ≤ N) – информация о тройниках.

Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.





#include

using namespace std;

int main() {

int n,c,f;

f=0;

cin>>n;

for(int i=0;i
cin>>c;

f+=c-1; }

cout<
return 0; }



Складываем количество разъемов -1 (у каждого тройника один разъем уходит на подключение другого тройника)

В последнем тройнике используются все разъемы (+1)



Задача 55 (№ 264) Оттепель(Сложность: 17%)





INPUT.TXT

OUTPUT

1

6
-20 30 -40 50 10 -10

2

2

8
10 20 30 1 -10 1 2 3

4

3

5
-10 0 -10 0 -10

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

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

Входные данные. Во входном файле сначала записано число N – общее количество рассматриваемых дней (1 ≤ N ≤ 100). В следующей строке через пробел располагается N целых чисел, разделенных пробелами. Каждое число – среднесуточная температура в соответствующий день. Температуры – целые числа и лежат в диапазоне от –50 до 50.

Выходные данные. В выходной файл требуется вывести одно число – длину самой продолжительной оттепели, то есть наибольшее количество последовательных дней, на протяжении которых среднесуточная температура превышала 0 градусов. Если температура в каждый из дней была неположительной, выведите 0.



#include

using namespace std;

int main() {

int n, t, kol = 0,max=0;

cin >> n;

for (int i = 0; i < n; i++) {

cin >> t;

if (t>0) { kol++;

if (kol > max) max = kol; } else kol = 0; }

cout << max;

return 0; }



Считаем количество kol положительных чисел и сравниваем это количество с мах. Если встречается отрицательное число, то kol=0

Задача 56 (№ 949) Фибоначчиева последовательность. (Сл.17%)


Последовательность чисел a1, a2, …, ai,… называется Фибоначчиевой, если для всех i ≥ 3 верно, что ai=ai-1+ai-2, то есть каждый член последовательности (начиная с третьего) равен сумме двух предыдущих.

Ясно, что, задавая различные числа a1 и a2, мы можем получать различные такие последовательности, и любая Фибоначчиева последовательность однозначно задается двумя своими первыми членами.

Будем решать обратную задачу. Вам будет дано число n и два члена последовательности: an и an+1. Вам нужно написать программу, которая по их значениям найдет a1 и a2.

Входные данные. Входной файл содержит число n и значения двух членов последовательности: an и an+1 (1 ≤ n ≤ 30, члены последовательности — целые числа, по модулю не превышающие 2×109).

Выходные данные. В выходной файл OUTPUT.TXT выведите два числа — значения первого и второго членов этой последовательности.




INPUT.TXT

OUTPUT.TXT

1

4 3 5

1 1
#include

using namespace std;

int main() {

int n,a,b,x;

cin>>n>>a>>b;

Отнимаем от последнего числа (b) предыдущее число (a). Чтобы не использовать массив записываем в а разность (a=b-a) , а в b-предыдущее число.
for(int i=0;i
x=a;

a=b-a;

b=x; }
cout<
return 0; }