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

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

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

Добавлен: 17.03.2024

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

Скачиваний: 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%)

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

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



#include

#include

using namespace std; 

int main(){

  int min =3*10000;

  int max =-3*10000;

  int k = 0;

  int n;

  

  while (scanf("%d", &n) == 1){

    k++;  

    if ((k % 2 == 1) && (min>n)) min = n;

    if ((k % 2 == 0) && (max
  

  cout << max + min;

  return 0; }
Задача 64 (№ 409) Железная дорога (Сложность: 26%)

При строительстве новой железной дороги возникли проблемы. Дорога пролегает по холмистой местности, однако сами пути должны идти строго горизонтально. Поэтому руководство строительной компании приняло решение выровнять поверхность земли на этом участке. Главная проблема состоит в том, что привозить или вывозить землю на стройку стоит 10000$ за кубический метр. Поскольку бюджет железной дороги невелик, этого нельзя себе позволить.

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

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

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





INPUT.TXT

OUTPUT.TXT

1

4
0 1 1 0

0.6666666667

2

5
2 2 2 2 2

2.0000000000
Первая строка входного файла содержит количество N (1 < N <= 30000) точек, в которых была замерена высота. Вторая строка содержит результаты замеров – i-ое число строки содержит высоту над уровнем моря точки, находящейся на расстоянии (i-1) метр от начала участка. Все высоты – целые неотрицательные числа, не превосходящие 10000. Считайте, что между соседними точками измерений земная поверхность строго прямолинейна.

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


В выходной файл выведите ответ на задачу с точностью, не меньшей 10-5.


#include

using namespace std;

int main() {

    int n ;

    double   s,h1,h2;

    cin >> n;

    cin >> h1;

    s = 0;

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

{

        cin >> h2;

    s=s+(h1+h2)/2;

    h1=h2;}

    s=s/(n-1);

    printf("%.5f", s);

    return 0; }




Холм может состоять из трапеций, прямоуголь-ников или треугольников со стороной =1 м.

S трапеции= =(h1+h2)/2

S прямоугольника (при h1=h2) и S треугольника (при h2=0) сводятся к той же формуле.

Что бы не использовать массив для каждой следующей фигуры превращаем h2 в h1 и читаем h2. Полученную площадь холма длим на (n-1), т.к. участков на 1 меньше чем точек измерения


Задача 65 (№ 779) Строительство школы (Сложность: 30%)


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

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

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

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




INPUT.TXT

OUTPUT.TXT

1

4
1 2 3 4

3

2

3
-1 0 1

0
Входные данные. В первой строке входного файла INPUT.TXT сначала записано число N — количество учеников (1 ≤ N ≤ 100000). Во второй строке записаны в строго возрастающем порядке координаты домов учеников — целые числа, не превосходящие 2∙109по модулю.

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


#include

using namespace std;

int main(){

long long int a, k, n;

cin>>n;

k=n/2+1;   

     

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

    cin>>a;

    if(i==k)  cout<
    return 0; }

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




Массивы


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


Дано натуральное число N и последовательность из N элементов. Требуется вывести эту последовательность в обратном порядке.

Входные данные. В первой строке входного файла записано натуральное число N (N ≤ 103). Во второй строке через пробел идут N целых чисел, по модулю не превосходящих 103 - элементы последовательности.

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

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

# include




INPUT

OUTPUT

1

3
1 2 3

3 2 1
using namespace std;

int main(){

int a[1000],n;

cin>>n;

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

cin>>a[i]; }

for (int i = n; i >= 1; i--){

cout<
return 0; }



Задача 67 (№ 284) Подмассив массива (Сложность: 15%)





INPUT

OUTPUT

1

6
1 2 3 4 5 6
5
1 1
2 6
3 4
5 6
2 4

1
2 3 4 5 6
3 4
5 6
2 3 4
Пусть задан массив целых чисел а1, а2, ..., аn. Назовем его подмассивом f(i,j) массив, составленный из чисел массива аi, ai+1,..., aj-1, aj. Напишите программу, которая будет выводить подмассивы массива a.

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


Первая строка входного файла содержит число n (1 <= n <= 1000) - количество элементов в массиве а. Во второй строке содержатся числа a1, a2, … , аn разделенные пробелом. Все аi находятся в диапазоне от -231 до 231 - 1. В третьей строке находится m (1 <= m <= 100) — количество подмассивов, которые необходимо вывести. Следующие m строк содержат пары чисел ik, jk (1 <= ik <= jk <= n).
Выходные данные. В выходной файл OUTPUT.TXT для каждой пары (ik,jk) в отдельной строке выведите подмассив f(ik,jk).

# include

using namespace std;

int main(){

int n,j,m,b,c;

int a[1001];

cin >>n;

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

cin>>a[i]; }

cin>>m;

for (int i = 1; i <= m; ++i){

cin>>b>>c;

for (int j = b; j <= c; ++j){

cout<
 cout<
return 0; }







читаем заданный массив



цикл по количеству тестов


вывод подмассива



Задача 68 (№ 496) Сбор черники (Сложность: 17%)

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

Эти кусты обладают разной урожайностью, поэтому ко времени сбора на них выросло различное число ягод – на i-ом кусте выросло ai ягод.




INPUT.TXT

OUTPUT

1

4
1 2 3 4

9

2

3
1 2 3

6
В этом фермерском хозяйстве внедрена система автоматического сбора черники. Эта система состоит из управляющего модуля и нескольких собирающих модулей. Собирающий модуль за один заход, находясь непосредственно перед некоторым кустом, собирает ягоды с этого куста и с двух соседних с ним. Напишите программу для нахождения максимального числа ягод, которое может собрать за один заход собирающий модуль, находясь перед некоторым кустом заданной во входном файле грядки.
Входные данные. Первая строка входного файла содержит целое число N (3 <= N <= 1000) – количество кустов черники. Вторая строка содержит N целых положительных чисел a1, a2, ..., aN – число ягод черники, растущее на соответствующем кусте. Все ai не превосходят 1000.

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





#include

using namespace std;

 int main() {

int N, arr[1002], max = 0;

cin >> N;

 for (int i = 0; i < N; i++) {cin >> arr[i]; }

arr[N] = arr[0];

arr[N + 1] = arr[1];

 

for (int i = 1; i <= N; i++) {

if (arr[i - 1] + arr[i] + arr[i + 1] > max)

max = arr[i - 1] + arr[i] + arr[i + 1]; }

cout << max;

return 0; }



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



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


В полуфинале студенческого чемпионата мира по программированию NEERC (http://neerc.ifmo.ru) участвуют команды из n институтов. Участники для проведения соревнований распределяются по k залам, каждый из которых имеет размеры, достачные для размещения всех команд от всех институтов. При этом по правилам соревнований в одном зале может находиться не более одной команды от института.

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




INPUT

OUTPUT

1

3
1 2 4
3

6

2

3
1 2 4
4

7
Напишите программу, определяющую максимальное количество команд, которые можно допустить до участия в полуфинале.

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

Первая строка входного файла INPUT.TXT содержит число n - число институтов, подавших заявки. Вторая строка входного файла содержит n чисел a1, …, an (ai - это количество команд, заявленных от института номер i). Последняя строка входного файла содержит число k - количество залов, в которых проходят соревнования.

Все числа во входном файле целые, положительные и не превосходят 10000.

Выходные данные.
В выходной файл выведите одно целое число - ответ на задачу.

#include

using namespace std;

int main() {

int n,k,a[10000],s=0,x;

cin>>n;

for(int i=0;i>a[i];}

cin>>k;

for(int i=0;i
if(a[i]>k)

x=k; else x=a[i];

s=s+x; }

cout<
return 0; }

Если команд больше чем залов, то берем столько команд, сколько залов. Иначе берем все команды.




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


В некотором государстве действует N фирм, конкурирующих между собой. У каждой фирмы есть некоторая прибыль в год, равная V[i] американских рублей. У царя есть любимые фирмы, а есть нелюбимые. Соответственно, налог для всех фирм разный и назначается царем в индивидуальном порядке. Налог на i-ую фирму равен p[i] %. Собиратели статистики решили посчитать, с какой фирмы в государственную казну идет наибольший доход (в казну идут все налоги). К сожалению, они не учили в детстве ни математику, ни информатику (так что учитесь, дети!), и их задача резко осложняется. Помогите им в этой нелегкой задаче.



INPUT

OUTPUT

1

1
1
1

1

2

2
1 2
3 2

2

3

3
100 1 50
0 100 3

3
Входные данные. Во входном файле сначала записано число N - число фирм (0 < N ≤ 100). Далее идет N целых неотрицательных чисел, не превышающих 154 - доходы фирм, а затем еще N целых чисел от 0 до 100 - налоги фирм в процентах.

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



#include

#include

using namespace std;

int main(){

    int n;float max=0;int f=0;int i;float money[100],pr[100]; float nal[100];int h=0;

    cin>>n;

    for(i=0;i>money[i]; }

    for(i=0;i>pr[i];}

     for(i=0;i
            nal[i]=money[i]/100*pr[i];

        if(nal[i]>max) {max=nal[i];h=i;  }    }

        cout<

Задача 71 (№ 912) Одежда (Сложность: 24%)


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




INPUT.TXT

OUTPUT.TXT

1

6
1 2 5 2 1 2

2

2

4
5 5 4 4

0
Путешественник стоит на высоком холме недалеко от входа в город. С этого холма он видит цвет одежды каждого жителя города. Путешественник торопится войти в город, ему важно быстро определить, традициям какого народа следовать в этом городе.

Входные данные. Первая строка входного файла INPUT.TXT содержит число N - количество жителей города, которых видит путешественник (1 ≤ N ≤ 104). Вторая строка теста содержит N натуральных чисел, разделенных пробелами. Каждое число сi – это цвет одежды i-го жителя (1 ≤ ci ≤ 100).

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


#include

using namespace std;

int main() {

int n,k,a,z;

int arr[100];

for(int i=0;i<=100;i++)

{arr[i]=0;}

cin>>n;

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

{ cin>>a; arr[a]++; }

int max=0;

z=0;

for(int i=1;i<=100;i++)

{ if(arr[i]>max) {max=arr[i]; z=i; }}

k=0;

for(int i=1;i<=100;i++){

if(max==arr[i]) k++; }

if (k==1) cout<
return 0;}


Будем использовать сортировку подсчетом. Создаем и обнуляем массив, размер которого= количеству цветов. i-я ячейка соответствует i-му цвету. Нужно подсчитать количество каждого цвета.

Читаем цвет (а) и увеличиваем соответствующую ячейку на 1.

Находим самый популярный цвет (мах)

Проверяем условие: если оказывается, что таких народов (мах) несколько, то выбираем белый цвет, который обозначается нулём

Задача 72 (№ 534) Клавиатура – 2 (Сложность: 25%)

Всем известно, что со временем клавиатура изнашивается, и клавиши на ней начинают залипать. Конечно, некоторое время такую клавиатуру еще можно использовать, но для нажатий клавиш приходиться использовать большую силу. При изготовлении клавиатуры изначально для каждой клавиши задается количество нажатий, которое она должна выдерживать. Если знать эти величины для используемой клавиатуры, то для определенной последовательности нажатых клавиш можно определить, какие клавиши в процессе их использования сломаются, а какие – нет. Требуется написать программу, определяющую, какие клавиши сломаются в процессе заданного варианта эксплуатации клавиатуры.
Входные данные. Первая строка входного файла содержит целое число N (1 ≤ N ≤ 100) – количество клавиш на клавиатуре. Вторая строка содержит n целых чисел – с1, с2, … , сN, где сi (1 ≤ сi ≤ 100000) – количество нажатий, выдерживаемых i-ой клавишей. Третья строка содержит целое число K (1 ≤ K ≤ 100000) – общее количество нажатий клавиш, и последняя строка содержит K целых чисел pj (1 ≤ pj ≤ N) – последовательность нажатых клавиш.



INPUT.TXT

OUTPUT

1

5
1 50 3 4 3
16
1 2 3 4 5 1 3 3 4 5 5 5 5 5 4 5

yes
no
no
no
yes
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести N строк, содержащих информацию об исправности клавиш. Если i-ая клавиша сломалась, то i-ая строка должна содержать слово "yes" (без кавычек), если же клавиша работоспособна – слово "no".


#include

#include

using namespace std;

int main(){

int n,k,p;

int key[2][101];

cin>>n;

for(int j=1;j<=n;j++){cin>>key[0][j];}

for(int j=1;j<=n;j++){key[1][j]=0;}
cin>>k;

for(int i=1;i<=k;i++){

cin>>p;

key[1][p]++; }

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

if(key[0][i]>=key[1][i]) cout<<"no"<
else cout<<"yes"<
return 0;}

Задача также решается сортировкой подсчетом.
Для решения используется массив из двух строк:

0 строка – допустимое число нажатий клавиши,

1 строка- сколько раз была нажата клавиша


1

клавиша

2

клавиша

3

клавиша

4

клавиша

5

клавиша

1

50

3

4

3

2

1

3

3

7



Задача 73 (№ 579) Модуль суммы (Сложность: 25%)

Дана последовательность целых чисел. Требуется найти подпоследовательность заданной последовательности с максимальным модулем суммы входящих в нее чисел. Напомним, что модуль целого числа x равняется x, если x ≥ 0 и -x, если x < 0.
Входные данные. Первая строка входного файла INPUT.TXT содержит натуральное число n (1 ≤ n ≤ 10000) - длину последовательности. Во второй строке записаны n целых чисел, по модулю не превосходящих 10000. Выходные данные. В первой строке выходного файла OUTPUT.TXT выведите длину l выбранной вами подпоследовательности. Во второй строке должны быть записаны l различных чисел, разделенных пробелами - номера выбранных членов последовательности.

#include

#include

using namespace std;
int main() {

int n,k,a[10000];

int kp=0;

int ko=0;

int Sp=0;

int So=0;

cin>>n;

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

cin>>a[i];

if (a[i]>0) {Sp=Sp+a[i]; kp++;}

if (a[i]<0) {So=So+a[i]; ko++;}

}
if (Sp>abs(So)){

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

if (a[i]>0) cout<
}
if (Sp
cout<
for(int i=1;i<=n;++i){

if (a[i]<0) cout<
}

if (Sp==0 and So==0) cout<<"1 1";

return 0; }



INPUT.TXT

OUTPUT

1

5
-1 4 -1 6 -7

2
2 4


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


Иначе выводим количество отрицательных чисел и их номера


Если даны все нули, то ответ 1 1