Задачи для самостоятельного решения. 1.9.2.1. Разбить кучу камней заданных весов на 2 части так, чтобы их суммы отличались минимально

 

1.9.2.1. Разбить кучу камней заданных весов на 2 части так, чтобы их суммы отличались минимально. В первой строке задаётся число камней n, во второй – n целых чисел – веса камней. В первой строке напечатать два числа – количества камней в первой и второй куче, во второй и третьей строке – веса камней в первой и второй полученной куче.

Исходные данные:

1 2 3 4 9

Результат:

4 1

1 2 3 4

 

1.9.2.2. Разбить кучу камней заданных весов на 3 части так, чтобы суммы самой большой и самой маленькой отличались минимально. В первой строке задаётся число камней n, во второй строке – n целых чисел – веса камней. В первой строке напечатать три числа – количества камней в первой, второй и третьей куче, во второй, третьей и четвёртой строках – веса камней в первой, второй и третьей полученных частях.

Исходные данные:

1 2 3 4 9

Результат:

2 2 1

1 4

2 3

 

1.9.2.3. Обход шахматным конем всех клеток на доске размера n на n по одному разу. В первой строке задаётся размер доски n, во второй строке задаётся два числа – номер строки и столбца – начальная позиция коня. Напечатать квадратную матрицу чисел с номерами ходов коня. Начальная позиция имеет номер 1. Если решения нет, то напечатать «НЕТ».

Исходные данные:

Результат:

НЕТ

 

1.9.2.4. Обход шахматным конем всех клеток на доске размера n на n по одному разу и возврат в начальную клетку. В первой строке задаётся размер доски n, во второй строке задаётся два числа – номер строки и столбца – начальная позиция коня. Напечатать квадратную матрицу чисел с номерами ходов коня. Начальная позиция имеет номер 1. Если решения нет, то напечатать «НЕТ».

Исходные данные:

Результат:

НЕТ

 

1.9.2.5. Попасть шахматным конем из одной заданной клетки в другую (кратчайший путь) на доске размера n на n. В первой строке задаётся размер доски n, во второй строке задаётся два числа – номер строки и столбца – начальная позиция коня, в третьей строке задаётся два числа – номер строки и столбца – конечная позиция коня. Напечатать квадратную матрицу чисел с номерами ходов коня. Начальная позиция имеет номер 1. Если решения нет, то напечатать «НЕТ».

Исходные данные:

1 1

1 3

Результат:

1 0 0

0 0 2

0 0 0

 

1.9.2.6. Расставить n ферзей на шахматной доске размера n и напечатать для каждой строки номер позиции, в которой стоит в этой строке ферзь. Значение n вводится.

Результат:

2 4 1 3

 

1.9.2.7. Два ферзя на доске угрожают друг другу или нет. На шахматной доске размера n даны позиции двух ферзей. Напечатать «ДА», если ферзи угрожают друг другу. Напечатать «НЕТ» в противном случае. В первой строке задаётся размер доски n, во второй строке задаётся два числа – номер строки и столбца первого ферзя, в третьей строке задаётся два числа – номер строки и столбца второго ферзя.

Исходные данные:

1 1

1 3

Результат:

НЕТ

 

1.9.2.8. Из символов 1, 2, 3 построить последовательность длины N, которая не содержит смежные (соседние) одинаковые подпоследовательности. Значение N вводится.

Исходные данные:

Результат:

 

1.9.2.9. Дан целочисленный массив из N элементов. Построить дерево Фенвика и вычислять суммы на отрезках для заданных диапазонов. В первой строке задаётся размер массива N, а во второй – сам массив, элементы идут через один пробел. Далее следует число запросов k и сами запросы, каждый в отдельной строке. Каждый запрос содержит пару индексов i и j. На каждый запрос нужно вывести сумму элементов массива от номера i до номера j включительно.

Исходные данные:

1 2 3 4 5 6 7 8 9 10 11

1 11

2 10

7 8

Результат:

 

1.9.2.10. Медиана на плоскости. На плоскости находятся N точек (N чётно). Никакие три точки не лежат на одной прямой. Ваша задача — выбрать две точки так, что прямая линия, проходящая через них, делит множество точек на две части одинакового размера. Первая строка содержит целое число N (2 ≤ N ≤ 10 000). Каждая из следующих N строк содержит пары целых чисел xi, yi (−109xi, yi ≤ 109) — координаты i-й точки. Вывести номера выбранных точек.

Исходные данные:

0 0

1 0

0 1

1 1

Результат:

1 4

 

Продвинутые задачки.

 

1.9.3.1. Охотники и приведения. Группа из N охотников сражается с N привидениями. Каждый охотник вооружен протонной пушкой, которая стреляя лучом в привидение, испепеляет его. Луч распространяется по прямой линии и исчезает после попадания в привидение. Охотники договорились о следующей стратегии. Каждый из них выберет по привидению, образовав таким образом N пар Охотник-привидение, а затем одновременно каждый из охотников стреляет в свое привидение. Как известно, очень опасно дать протонным лучам пересечься, поэтому охотники разбиваются на пары так, чтобы лучи не пересеклись. Задача заключается в том, чтобы помочь охотникам разбиться на пары, удовлетворяющие указанному ограничению

Предположим, что позиция каждого охотника и каждого привидения - это фиксированная точка на плоскости и никакие три точки не лежат на одной прямой.

Составьте программу, которая:

считывает позиции охотников и привидений из входного файла;

разбивает множество введенных позиций на пары Охотник-привидение;

выводит полученную последовательность пар в выходной файл.

В первой строке набора находится число N - количество сражающихся охотников (N<=150), В следующих 2*N строках заданы позиции на плоскости N охотников и N привидений (сначала все охотники, затем - все привидения); каждая позиция занимает отдельную строку и представляет собой пару целых чисел, разделенных пробелами, - координаты позиции на плоскости (абсолютные значения координат не превосходят 32000).

Исходные данные:

-100 -200

-100 200

-200 -100

200 -100

100 200

100 -200

200 100

-200 100

Результаты:

-100 -200 100 -200

-100 200 100 200

-200 -100 -200 100

200 -100 200 100

 

1.9.3.2. Лопасти и винты. Винт вертолёта состоит из трёх лопастей. Три лопасти подходят для одного винта, если их длины отличаются не более, чем на 1 см. Каждая лопасть может входить только в один винт, но не все лопасти обязательно попадут в какие-то винты. Если решений несколько, можно вывести любое. В первой строке исходных данных указано число лопастей n (n <=100). Во второй строке перечислены n целых чисел – длины лопастей. Написать программу, которая составит из имеющихся лопастей наибольшее число винтов и напечатает их количество в первой строке результата, а в последующих строках тройки номеров лопастей, составляющих собранные винты.

Исходные данные:

3 2 7 4 3 2 1

Результат:

1 2 3

2 3 4

 

1.9.3.3. Решить судоку. В матрице 9 на 9 некоторые числа уже расставлены по правилам судоку, остальные клетки пустые (0). Расставить недостающие числа по правилам судоку: в каждой строке, каждом столбце и в каждом фрагменте 3 на 3 встречаются все цифры от 1 до 9. Если решений нет, то напечатать «НЕТ» или напечатать заполненную матрицу.

Исходные данные:

6 7 0 0 0 0 0 3 1

8 3 5 1 6 0 0 2 9

0 0 4 9 3 5 7 0 0

7 6 0 0 0 3 9 4 2

0 0 2 6 8 0 0 0 7

5 9 0 0 0 0 0 0 6

0 0 6 0 0 1 0 0 0

1 2 0 0 0 0 0 0 5

4 0 0 0 0 0 0 0 3

Результат:

6 7 9 8 4 2 5 3 1

8 3 5 1 6 7 4 2 9

2 1 4 9 3 5 7 6 8

7 6 8 5 1 3 9 4 2

3 4 2 6 8 9 1 5 7

5 9 1 7 2 4 3 8 6

9 8 6 3 5 1 2 7 4

1 2 3 4 7 8 6 9 5

4 5 7 2 9 6 8 1 3

 

1.9.3.4. ГО выявить все группы одноцветных камней на доске N на N. В первой строке задаётся размер доски N. В следующих N строках по N символов записано положение камней в игре ГО. Символ ‘.’ обозначает пустое место, символ ‘*’ обозначает чёрный камень, символ ‘O’ – белый камень. Написать программу, которая найдёт и напечатает все группы чёрных камней. В первой строке вывести количество чёрных групп, а далее сами группы в отдельной строке в следующем формате: сначала будет идти натуральное число k – размер группы, потом будут перечислены k пар чисел – позиции камней этой группы (номер строки и номер столбца) – числа от 1 до N. Два камня входят в одну группу, если они являются соседями по вертикали или горизонтали, или имеют других соседей из этой группы.

Исходные данные:

.O...

**..O

..O**

..*..

*OOO.

Результат:

2 2 1 2 2

2 3 4 3 5

1 4 3

1 5 1

 

1.9.3.5. ГО проверить, что группа одноцветных камней на доске N на N окружена камнями противника (другого цвета). В первой строке задаётся размер доски N. В следующих N строках по N символов записано положение камней в игре ГО. Символ ‘.’ обозначает пустое место, символ ‘*’ обозначает чёрный камень, символ ‘O’ – белый камень. В следующей строке заданы координаты одного из камней некоторой группы. Написать программу, которая напечатает «ДА», если группа камней окружена камнями противника. В противном случае напечатать «НЕТ». Два камня входят в одну группу, если они являются соседями по вертикали или горизонтали, или имеют других соседей из этой группы. Группа камней окружена, если все соседние позиции заняты камнями противника.

Исходные данные:

*O*..

**..O

..O**

..*..

*OOO.

1 2

Результат:

ДА

 

1.9.3.6. ГО проверить, что группа одноцветных камней на доске N на N имеет по крайней мере два глаза, т.е. жизнеспособна. В первой строке задаётся размер доски N. В следующих N строках по N символов записано положение камней в игре ГО. Символ ‘.’ обозначает пустое место, символ ‘*’ обозначает чёрный камень, символ ‘O’ – белый камень. В следующей строке заданы координаты одного из камней некоторой группы. Написать программу, которая напечатает «ДА», если группа камней имеет два глаза и не может быть окружена и снята с доски. В противном случае напечатать «НЕТ». Два камня входят в одну группу, если они являются соседями по вертикали или горизонтали, или имеют других соседей из этой группы. Группа камней окружена, если все соседние позиции заняты камнями противника.

Исходные данные:

*.*..

**ООO

.*O**

.*О..

*OOO.

3 3

Результат:

НЕТ

 

СПИСОК ЛИТЕРАТУРЫ

 

Литература по языкам программирования

 

Бьерн Страуструп. Язык программирования С++. Специальное издание. Бином, Москва, 2001г.

 

Пышкин, Е.В. Основные концепции и механизмы объектно-ориентированного программирования [Текст] Учебное пособие. BHV, СПб., 2005г.

 

Дейтел Х. Как программировать на С++. М. БИНОМ, 2001г.

 

Культин Н. C/C++ в задачах и примерах. BHV, 2003г.

 

Романов Е.Л. Практикум по программированию на C++. BHV, 2004г.

 

Климова Л. С++. Решение типовых задач. КУДИЦ-ОБРАЗ, Москва, 2004г.

 

Прата С. Язык программирования С++. Лекции и упражнения. СПб, ООО ДиаСофтЮП, 2004г.

 

Шилдт Г. Самоучитель С++. BHV, СПб., 2005г.

 

Шилдт, Г., С# 4.0: полное руководство [Текст]: Пер. с англ. / Герберт Шилдт. – М., ООО «ИД Вильямс», 2011. - 1056 с.