Если вы изучаете свой первый язык программирования и не важно какой это язык... Или же, изучаете еще один новый язык программирования, то как обычно не хватает практических задач, для укрепление практики и запоминания нового языка. Этот сборник задач, предназначен для исключения этой проблемы.
Работа с консолью
1. Вывести на экран текст "Silence is golden".
2. Вывести на экран текущее название дня недели, название месяца и свое имя. Каждое слово должно быть в отдельной строке.
3. Вывести на экран пять строк из нулей, причем количество нулей в каждой строке равно номеру строки.
4. Вывести на экран прямоугольник, заполненный буквами А. Количество строк в прямоугольнике равно 5, количество столбцов равно 8.
5. Вывести на экран результат вычисления 1+2−4.
Простейшая арифметика
6. Пользователь вводит два числа. Найдите сумму и произведение данных чисел.
7. Пользователь вводит число. Выведите на экран квадрат этого числа, куб этого числа.
8. Пользователь вводит три числа. Увеличьте первое число в два раза, второе числа уменьшите на 3, третье число возведите в квадрат и затем найдите сумму новых трех чисел.
9. Пользователь вводит три числа. Найдите среднее арифметическое этих чисел, а также разность удвоенной суммы первого и третьего чисел и утроенного второго числа.
10. Пользователь вводит сторону квадрата. Найдите периметр и площадь квадрата.
11. Даны две переменных с некоторыми значениями. Поменять местами значения этих переменных
12. Даны три переменные a, b и c. Изменить значения этих переменных так, чтобы в a хранилось значение a+b, в b хранилась разность старых значений c−a, а в c хранилось сумма старых значений a+b+c. Например, a=0, b=2, c=5, тогда новые значения a=2, b=3 и c=7.
13. Поменяйте местами значения двух переменных, не используя дополнительных переменных.
14. Дано число a. Не пользуясь никакими арифметическими операциями кроме умножения, получите а) А в 4 степени за две операции; б) А в 6 степени за три операции; в) А в 15 степени за пять операций.
Условный оператор и арифметика
15. Дано число. Если оно больше 3, то увеличить число на 10, иначе уменьшить на 10.
16. Дано число. Если оно меньше 7, то вывести Yes, если больше 10, то вывести No, если равно 9, то вывести Error.
17. Пользователь вводит номер месяца, вывести название месяца.
18. Дано два числа. Вывести наибольшее из них.
19. Дано два числа. Вывести yes, если они отличаются на 100, иначе вывести No.
20. Даны два числа. Если первое число больше второго, то вывести yes, иначе поменять значения этих переменных и вывести их на экран.
21. Дано число. Если оно от -10 до 10 не включительно, то увеличить его на 5, иначе уменьшить на 10.
22. Дано число. Если оно более 100 или менее -100, то занулить, иначе увеличить его на 1.
23. Дано число. Если оно от 2 до 5 включительно, то увеличить его на 10. Если оно от 7 до 40, то уменьшить на 100. Если оно не более 0 или более 3000, то увеличить в 3 раза (то есть умножить на 3). Иначе занулить это число.
24. Пользователь вводит номер месяца. Вывести название поры года (весна, лето и т.д.)
25. Пользователь вводит два числа. Если они не равны 10 и первое число четное, то вывести их сумму, иначе вывести их произведение.
26. Пользователь вводит три числа. Если все числа больше 10 и первые два числа делятся на 3, то вывести yes, иначе no
27. Пользователь вводит три числа. Найти сумму тех чисел, которые делятся на 5. Если таких чисел нет, то вывести error.
28. Даны три числа. Найдите наибольшее число из них.
29. Даны три числа. Найдите те два из них, сумма которых наибольшая.
30. Пользователь вводит четыре числа. Найдите наибольшее четное число среди них. Если оно не существует, выведите фразу "not found"
31. Даны три числа. Написать "yes", если среди них есть одинаковые.
32. Даны три числа. Написать "yes", если можно взять какие-то два из них и в сумме получить третье
33. Дано четыре числа, если первые два числа больше 5, третье число делится на 6, четвертое число не делится на 3, то вывести yes, иначе no.
34. Дано два числа. Если хотя бы одно из них больше 30, то вывести yes, иначе no.
35. Дано три числа. Если ровно два из них меньше 5, то вывести yes, иначе вывести no.
36. Дано три числа. Найти количество положительных чисел среди них.
37 .Робот может перемещаться в четырех направлениях («11» — север, «12» — запад, «13» — юг, «14» — восток) и принимать три цифровые команды: 0 — продолжать движение, 1 — поворот налево, –1 — поворот направо. Дан число (11, 12, 13 или 14) — исходное направление робота и целое число N (0, 1 или -1) — посланная ему команда. Вывести направление робота после выполнения полученной команды (то есть север, запад, юг или восток).
38. Дана дата из трех чисел (день, месяц и год). Вывести yes, если такая дата существует (например, 12 02 1999 - yes, 22 13 2001 - no). Считать, что в феврале всегда 28 дней.
39. Дано две даты, каждая из которых состоит из трех чисел (день, месяц и год). Вывести yes, если первая дата раньше второй, иначе вывести no.
40. Дано четырехзначное число. Верно ли, что цифр в нем расположены по убыванию? Например, 4311 - нет, 4321 - да, 5542 - нет, 5631 - нет, 9871 - да.
41. Дано трехзначное число. Переставьте первую и последнюю цифры.
42. Дано четырехзначное число. Определите, есть ли одинаковые цифры в нем.
43. Дано пятизначное число. Цифры на четных позициях занулить. Например, из 12345 получается число 10305.
44. Даны два трехзначных числа. Найдите шестизначное число, образованное из двух данных чисел путем дописывания второго числа к первому справа.
45. Дано четырехзначное число. Если оно читается слева направо и справа налево одинаково, то вывести yes, иначе no.
46. Дано четырехзначное число. Переставьте местами цифры так, чтобы сначала оказались цифры, меньшие пяти.
47. Даны два трехзначных числа. Получите новое число присоединением второго числа справа к первому без последних цифр у каждого. Например, 123 и 456 Ответ: 1245
48. Дано четырехзначное число. Поменяйте местами наименьшую и наибольшую цифры.
Циклы и арифметика
49. Выведите на экран 10 раз фразу "You are welcome!"
50. Выведите на экран n раз фразу "Silence is golden". Число n вводит пользователь.
51. Выведите на экран прямоугольник из нулей. Количество строк вводит пользователь, количество столбцов равно 5.
52. Вывести на экран фигуру из звездочек:
*******
*******
*******
*******
(квадрат из n строк, в каждой строке n звездочек)
53. Выведите на экран числа 1, 2, 3, 4, ..., 20.
54. Вывести на экран ряд чисел 1001, 1004, 1007, ... 1025.
55. Вывести на экран числа 100, 96, 92, ... до последнего положительного включительно.
56. Выведите на экран числа 1.2, 1.4, 1.6, ..., 2.8.
57. Выведите следующие строки. Первая: 25 25.5 24.8. Вторая: 26 26.5 25.8. И так далее. Последняя строка: 35 35.5 34.8.
58. Пользователь вводит курс доллара в рублях. Показать таблицу цен 1$, 2$, ..., 100$ в рублях, третьим столбцом добавить количество кг конфет, которые можно купить на данные суммы, если цена 1 кг конфет равна 20 руб. Пример: 1$ - 70 р - 3.5 кг и так далее (всего 100 строк).
59. Для данного n найти сумму 1+2+3+...+n. Например, для n=10 ответ равен 55.
60. Найти сумму 10+11+12+13+...+88. Ответ: 3871
61. Найти произведение 5⋅6⋅7⋅...⋅13.
62. Найти сумму 1+4+7+11+...+112
63. Вывести на экран сто первых сумм вида 1+2+3+...+n.
64. Найдите сумму квадратов первых n натуральных чисел
65. Начав тренировки, лыжник в первый день пробежал 10 км. Каждый следующий день он увеличивал пробег на 10% от пробега предыдущего дня. Определите: а) пробег лыжника за второй, третий, ..., десятый день тренировок; б) какой суммарный путь он пробежал за первые 7 дней тренировок. в) суммарный путь за n дней тренировок; г) в какой день ему следует прекратить увеличивать пробег, если он не должен превышать 80 км?
66. Вывести на экран числа от 1000 до 9999 такие, что все цифры различны.
67. Вывести на экран числа от 1000 до 9999 такие, что среди цифр нет цифр 5 и цифры 6.
68. Вывести все пятизначные числа, которые делятся на 2, у которых средняя цифра нечетная, и сумма всех цифр делится на 4.
69. Вывести на экран числа от 1000 до 9999 такие, что среди цифр есть цифра 3.
70. Найдите трехзначные числа, равные сумме кубов своих цифр.
71. Сколько существует четырехзначных чисел, которые в 600 раз больше суммы своих цифр?
72. Найдите хотя одно натуральное число, которое делится на 11, а при делении на 2, 3, 4, ..., 10 дает в остатке 1
73. Вывести на экран n единиц, затем 2n двоек, затем 3n троек. Число n вводит пользователь.
74. Вывести ряд чисел: десять десяток, девять девяток, восемь восьмерок, ... , одну единицу. Найти сумму всех этих чисел.
75. Выведите на экран строки (в последней строке n звездочек):
*
**
***
****
*****
76. Выведите на экран строки вида:
*******
****
*******
****
*******
****
(всего n строк, звездочек или 7, или 4 по очереди)
77. Вывести на экран:
AAABBBAAABBBAAABBB
BBBAAABBBAAABBBAAA
AAABBBAAABBBAAABBB
(таких строк n, в каждой строке m троек AAA)
78. Вывести на экран:
AAAAAAAAAAAAAAAA
ABBBBBBBBBBBBBBA
ABBBBBBBBBBBBBBA
ABBBBBBBBBBBBBBA
AAAAAAAAAAAAAAAA
(количество строк вводит пользователь, ширина прямоугольника в два раза больше высоты)
79. Выведите на экран квадрат из нулей и единиц, причем нули находятся только на диагонали квадрата. Всего в квадрате сто цифр.
80. Вывести на экран 20 строк. В строках с четными номерами вывести по 10 чисел, равных номеру строки. В строках с нечетными номерами вывести десять единиц.
81. Вывести 30 строк. Нечетные строки содержат натуральные числа от 1 до номера текущей строки включительно с шагом 1, четные строки состоят из пяти единиц.
82. Выведите на экран таблицу умножения для чисел от 1 до 10.
83. Найдите количество целых чисел от a до b включительно, которые делятся на 12.
84. Пользователь вводит ненулевые числа до тех пор пока не введет ноль. Найдите сумму этих чисел.
85. Пользователь вводит ненулевые целые числа до тех пор, пока не введет ноль. Найдите количество четных чисел, которые он ввел.
86. Найдите четырехзначные числа, сумма цифр которых равна 15.
87. Найдите наибольшую цифру в данном натуральном числе.
88. Дано натуральное число. Найдите количество четных цифр.
89. В данном натуральном числе найдите количество цифр, которые больше 3, но меньше 8.
90. Для данного натурального числа найдите число, цифры которого записаны в обратном порядке.
91. Найдите n-ое число Фибоначчи.
92. Два числа называются дружественными, если каждое из них равно сумме всех делителей второго не считая самого этого числа. Найдите все пары дружественных чисел на отрезке [a;b].
93. Натуральное число называется совершенным, если оно равно сумме всех своих делителей, не равных самому числу. Найдите все совершенные числа, меньшие данного натурального числа n.
94. Назовем автобусный билет несчастливым, если сумма цифр его шестизначного номера делится на 13. Могут ли два идущих подряд билета оказаться несчастливыми?
95. Найдите n пар простых чисел, которые отличаются друг от друга на 2.
96. Найдите все натуральные числа, не превосходящие 10000, сумма цифр каждого из которых в некоторой степени равна самому числу.
97. Дано число k. Определите, существует ли такое число n, что 1+2+3+...+n=k.
98. Найдите, сколько точек с целочисленными координатами попадает в круг радиуса r с центром в точке (x,y).
99. Выведите случайную серию чисел из 0 и 1 такую, что сумма чисел в ней больше 10.
100. Дано n кирпичей. Вы и компьютер ходите поочередно. за ход можно взять 1, 2 или 3 кирпича. Проиграл тот, кому нечего брать. Реализуйте игру с компьютером. Компьютер ходит случайно (без анализа выигрышной стратегии), однако если у него есть ход, который является последним для его выигрыша, то он его совершает.
101. Реализуйте серию из n игр "Камень, ножницы, бумага" с компьютером. В результате выведите статистику: сколько игр выиграл пользователь, сколько раз каждого вида ходов было выбрано. Дополните игру анализом компьютера ваших ходов и выбор наиболее подходящего против вас хода.
102. Сгенерировать случайную серию из 15 чисел, в которой ровно 3 единицы, остальные нули.
103. Сгенерируйте серию из 10 случайных чисел от 1 до 3 и найдите: а) на сколько количество двоек больше/меньше количества троек, б) количество троек, стоящих на четных местах, в)количество двоек среди первых пяти чисел серии.
104. Сгенерировать 20 серий из 0, 1, 2 таких, что сумма чисел в каждой серии равна 12. Найти количество единиц в каждой серии, количество двоек в каждой серии, длину каждой серии, среднее количество двоек в сериях, среднюю длину серий и наибольшее количество ненулевых чисел в сериях. Материал сайта www.itmathrepetitor.ru
105. Сгенерируйте серию случайных чисел из 0, 1, 2 так, чтобы количество двоек было равно количеству нулей.
106. Компьютер загадывает число от 1 до 100. У пользователя три попытки отгадать. После каждой неудачной попытки компьютер сообщает меньше или больше загаданное число.
107. Вывести 3 случайных числа от 0 до 100 без повторений.
108. Найдите количество прямоугольных треугольников с целочисленными сторонами, меньшими 100.
Работа с символами
109. Пользователь вводит англ. букву, вывести следующие три по алфавиту. Если алфавит закончился, то вывести циклично с начала алфавита, то есть если z, то a b c. Вывод только маленьких букв. Учесть, что пользователь может ввести заглавную
110. Вывести англ. алфавит по 5 букв в строке.
111. Вывести квадрат 7 на 7 из случайных букв.
112. Пользователь вводит положительное целое число. Зашифровать каждую цифру серией из букв (конкретный принцип составления серии букв разработать самостоятельно).
113. Сгенерируйте строку символов длины от 3 до 10, в которой ровно 2 символа "!".
114. Сгенерировать пароль для пользователя. Требования: длина от 6 до 20 символов, должен быть ровно один символ подчеркивания, хотя бы две заглавных буквы, не более 5 цифр, любые две цифры подряд недопустимы.
Задачи на массивы
115. Заполнить массив нулями, кроме первого и последнего элементов, которые должны быть равны единице.
116. Заполнить массив нулями и единицами, при этом данные значения чередуются, начиная с нуля.
117. Заполнить массив последовательными нечетными числами, начиная с единицы.
118. Сформировать массив из элементов арифметической прогрессии с заданным первым элементом x и разностью d.
119. Сформировать возрастающий массив из четных чисел.
120. Сформировать убывающий массив из чисел, которые делятся на 3.
121. Создать массив из n первых чисел Фибоначчи.
122. Заполнить массив заданной длины различными простыми числами. Натуральное число, большее единицы, называется простым, если оно делится только на себя и на единицу.
123. Создать массив, каждый элемент которого равен квадрату своего номера.
124. Создать массив, на четных местах в котором стоят единицы, а на нечетных местах - числа, равные остатку от деления своего номера на 5.
125. Создать массив, состоящий из троек подряд идущих одинаковых элементов.
126. Создать массив, который одинаково читается как слева направо, так и справа налево.
127. Сформировать массив из случайных чисел, в которых ровно две единицы, стоящие на случайных позициях.
128. Заполните массив случайным образом нулями и единицами так, чтобы количество единиц было больше количества нулей.
129. Сформировать массив из случайных целых чисел от 0 до 9 , в котором единиц от 3 до 5 и двоек больше троек.
130. Создайте массив, в котором количество отрицательных чисел равно количеству положительных и положительные числа расположены на случайных местах в массиве.
131. Заполните массив случайным образом нулями, единицами и двойками так, чтобы первая двойка в массиве встречалась раньше первой единицы, количество единиц было в точности равно суммарному количеству нулей и двоек.
132. Придумайте правило генерации массива заданной длины. Определите, сгенерирован ли данный массив вашим правилом или нет.
133. Определить, содержит ли массив данное число x
134. Найти количество четных чисел в массиве.
135. Найти количество чисел в массиве, которые делятся на 3, но не делятся на 7.
136. Определите, каких чисел в массиве больше: которые делятся на первый элемент массива или которые делятся на последний элемент массива.
137. Найдите сумму и произведение элементов массива.
138. Найдите сумму четных чисел массива.
139. Найдите сумму нечетных чисел массива, которые не превосходят 11.
140. Найдите сумму чисел массива, которые расположены до первого четного числа массива. Если четных чисел в массиве нет, то найти сумму всех чисел за исключением крайних.
141. Найдите сумму чисел массива, которые стоят на четных местах.
142. Найдите сумму чисел массива, которые стоят на нечетных местах и при этом превосходят сумму крайних элементов массива.
143. Найти наибольший элемент массива.
144. Найдите сумму наибольшего и наименьшего элементов массива.
145. Найдите количество элементов массива, которые отличны от наибольшего элемента не более чем на 10%.
146. Найдите наименьший четный элемент массива.
147. Среди элементов с нечетными номерами найдите наибольший элемент массива, который делится на 3.
148. Дан массив и число p. Найдите два различных числа в массиве, сумма которых наиболее близка к p.
149. Дан массив. Найдите два соседних элемента, сумма которых минимальна.
150. Дан массив. Найдите три последовательных элемента в массиве, сумма которых максимальна.
151. В данном массиве найдите количество чисел, соседи у которых отличаются более чем в 2 раза.
152. Найдите количество чисел, каждое из которых равно сумме квадратов своих соседей и при этом не является наибольшим в массиве.
153. Проверьте, содержит ли данный массив из n чисел, все числа от 1 до n.
154. Проверьте, образует ли элементы массива в данном порядке арифметическую или геометрическую прогрессии.
155. Проверьте, является ли данный массив возрастающим или убывающим.
156. Найдите количество различных элементов данного массива.
157. Определите количество перемен знаков элементов массива.
158. В данном массиве найти максимальное количество одинаковых элементов.
159. Найти наиболее часто встречающийся элемент в массиве целых чисел.
160. В одномерном массиве, состоящем из n вещественных элементов, вычислите номер минимального элемента массива и сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
161. Напишите программу, которая вводит с клавиатуры непустой массив целых чисел, и выводит число локальных максимумов (элемент является локальным максимумом, если он не имеет соседей, больших, чем он сам).
162. В данном массиве найдите два наименьших элемента.
163. Определите, есть ли в массиве повторяющиеся элементы.
164. В данном массиве найдите наибольшую серию подряд идущих элементов, расположенных по возрастанию.
165. В массиве найдите количество серий из четверок подряд идущих попарно различных элементов.
166. Определите, можно ли вычеркнуть из данного массива одно число так, чтобы оставшиеся числа оказались упорядоченными по возрастанию.
167. В массиве заменить все числа, большие данного числа, на среднее арифметическое всех чисел массива.
168. Дан массив. Заменить все числа, меньшие последнего элемента массива, на первый элемент.
169. Поменять местами наибольший и наименьший элементы массива.
170. Найти наибольший четный элемент массива и поменять его местами с наименьшим нечетным элементом. Если одного из таких элементов нет, то всем элементам массива присвоить значение, равное нулю.
171. Заменить каждый элемент массива с четным номером на соседний слева элемент.
172. Удалить в массиве первый и последний элементы.
173. Удалить в массиве все числа, которые повторяются более двух раз.
174. Найти в массиве все серии подряд идущих одинаковых элементов и удалить из них все элементы кроме одного.
175. Удалить в массиве все наибольшие элементы.
176. Переставить элементы массива в обратном порядке.
177. Дан массив a из n элементов. Сформировать новый массив b такого же размера так, что элемент bk равен сумме элементов первых элементов массиваa до номера k включительно.
178. В данном массиве найти все нулевые элементы и заменить их вместе с соседними элементами на 3.
179. Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает единицу, а потом – все остальные.
180. Даны два массива. Сформировать третий массив, состоящий из тех элементов, которые: а) присутствуют в обоих массивах; б) присутствуют только в одном из массивов.
181. Дан массив. Осуществите циклический сдвиг массив на k единиц вправо, если первый наименьший элемент массива расположен раньше последнего наибольшего элемента массива, и влево, если иначе.
182. Даны два массива. Определите, существуют ли в первом массиве такие два элемента, что их сумма равна сумме каких-либо трех элементов второго массива.
183. Дан массив, в котором количество отрицательных элементов равно количеству положительным. Поменяйте местами первый отрицательный и первый положительный, второй отрицательный и второй положительный и так далее.
184. Удалите в целочисленном массиве все положительные числа, которые являются палиндромами.
185. Дан массив. Сформировать новый массив, в котором идут сначала отрицательные элементы, затем нули, затем положительные.
186. Даны два массива. Определите все серии подряд идущих элементов из первого массива (серия может состоять и из одного элемента), каждая из которых совпадает с какой-нибудь серией подряд идущих элементов второго массива.
187. Дан массив из n элементов. Переставьте его элементы случайным образом.
188. В данном массиве каждый элемент равен 0, 1 или 2. Переставить элементы массива так, чтобы сначала располагались все нули, затем все единицы и, наконец, все двойки. Дополнительный массив не использовать.
189. Даны два упорядоченных по возрастанию массива. Образовать из этих двух массивов единый упорядоченный по возрастанию массив.
190. Осуществить поиск данного числа в упорядоченном по возрастанию массиве методом бинарного поиска.
191. Дан массив натуральных чисел. Найти наименьшее натуральное число, не представимое суммой никаких элементов массива. Сумма может состоять и из одного слагаемого, но каждый элемент массива может входить в нее только один раз.
192. В данном массиве найти серию подряд идущих элементов наибольшей длины, в которой первое число равно последнему, второе - предпоследнему и так далее.
193. Выполните сортировку массива следующими тремя способами: сортировкой выбором, сортировкой вставками, сортировкой обменом.
194. Даны координаты центров окружностей и их радиусы. Определите количество пар окружностей, которые пересекаются.
195. Даны два множества точек на плоскости. Выбрать три различные точки первого множества так, чтобы круг, ограниченный окружностью, проходящей через эти три точки, содержал все точки второго множества и имел минимальную площадь.
196. Даны два множества точек на плоскости. Выбрать четыре различные точки первого множества так, чтобы квадрат с вершинами в этих точках накрывал все точки второго множества и имел минимальную площадь.
197. На прямой задано n числовых интервалов. Определите, образует ли объединение этих интервалов один интервал.
198. Из данных n точек на плоскости определите те три, которые образуют треугольник наибольшей площади.
199. На данных n точек на плоскости найдите все тройки точек, которые образуют равносторонние треугольники.
200. Дано 3n точек на плоскости, причем никакие три из них не лежат на одной прямой. Построить множество n треугольников с вершинами в этих точках так, чтобы никакие два треугольника не пересекались и не содержали друг друга.
201. На плоскости задано множество из n точек и прямая ax+by+c=0. Найдите максимальное расстояние между точками, лежащими по разные стороны от прямой.
202. Найти три треугольника с вершинами в заданном множестве точек на плоскости так, чтобы второй треугольник лежал строго внутри первого, а третий внутри второго.
203. Определите, образует ли последовательность из n точек на плоскости выпуклый многоугольник.
204. Дано n точек в трехмерном пространстве. Определите, лежат ли эти точки на одной плоскости.
205. Дано n точек на плоскости. Найдите круг минимального радиуса с центром в одной из точек, внутри которого и на границе находилось бы ровно m точек.
206. На плоскости дано n точек. Определите коэффициенты прямой y=kx+b, проходящей через первую точку и наибольшее число остальных точек.
207. На плоскости дано n точек. Определите коэффициенты прямой y=kx+b, проходящей через первую и одну из оставшихся точек так, чтобы все n точек лежали по одну сторону от этой прямой, и, быть может, на самой прямой.
208. Определить в заданной последовательности целых чисел количество чисел Фибоначчи.
209. Найти наименьшее общее кратное всех чисел, содержащихся в заданной последовательности натуральных чисел.
210. Пользователь вводит два натуральных числа, каждое из которых может состоять более чем из десяти цифр. Найдите сумма, разность и произведение данных чисел.
211. Определить количество повторений каждой из цифр 0,1,2,...,9 в числе n!, где n – натуральное число, n>100.
212. Получить все перестановки чисел 1,2,...,n. Например, при n=3 это 1 2 3, 1 3 2, 2 1 3, 2 3 1, 3 1 2, 3 2 1.
213. Дан целочисленный массив размера n. Увеличить все четные числа, содержащиеся в массиве, на исходное значение первого четного числа. Если четные числа в массиве отсутствуют, то оставить массив без изменений.
214. Дан массив размера n. Заменить каждый элемент массива на среднее арифметическое этого элемента и его соседей.
215. Дан массив размера n. После каждого отрицательного элемента массива вставить элемент с нулевым значением.
216. Дано n точек (точки заданы своими координатами x, y). Среди всех точек этого множества, лежащих во второй четверти, найти точку, наиболее удаленную от начала координат. Если таких точек нет, то вывести точку с нулевыми координатами.
217. Даны n обыкновенных дробей (массив числителей и массив знаменателей). Выполнить их сложение и умножение.
218. Два многочлена заданы массивами своих коэффициентов. Найдите их сумму и произведение.
219. Два многочлена заданы массивами своих коэффициентов. Найдите частное и остаток от деления одного многочлена на второй.
220. Дан массив коэффициентов многочлена. Найдите производную k-порядка этого многочлена.
221. По кругу расположены n человек. Ведущий считает по кругу, начиная с первого, и исключает из круга каждого m-го человека. Найдите номер человека, который останется последним в круге.
222. По кругу стоят n человек. Ведущий посчитал m человек по кругу, начиная с первого. При этом каждый из тех, кто участвовал в этом счете, получил по одной монете, остальные получили по две монеты. Далее человек, на котором остановился счет, отдает все свои монеты следующему по счету человеку, а сам выбывает из круга. Процесс продолжается с места остановки аналогичным образом до последнего человека в круге. Определите номер этого человека и количество монет, которые оказались у него в конце игры.
223. В массиве в порядке убывания заданы достоинства купюр валютной системы некоторой страны. Реализуйте выдачу заданной суммы s минимальным количеством купюр.
224. Из элементов массива a, состоящего из 2n элементов, получить массивы b и c следующим образом: выбрать в массиве a два наиболее близких по значению элемента, меньший из них поместить в массив b, а больший - в массив c. Исключить из рассмотрения в массиве a эти элементы и продолжить выбор из оставшихся элементов.
225. На большинстве Московских олимпиад каждый участник заполняет персональную карточку участника на которой указан 4(5)-значный номер карточки. Ясно, что не все числа из этого диапазона используются. Придумайте способы кодирования карточек, удовлетворяющие следующим требованиям:
1) При минимальном диапазоне возможных значений номеров в него должно умещаться максимальное число карточек, то есть не следует кодировать номера карточек десятизначными последовательностями.
2)Система кодирования должна уметь исправлять одну (две, ...) ошибки в написании номера карточек (то есть если школьник ошибется в одной (двух, ...) цифрах при переписывании номера карточек, то эта ошибка может быть исправлена, например, после ввода информации в компьютер).
3)Система кодирования должна быть максимально простой, например, номера карточек должны образовывать арифметическую прогрессию. Также желательно сделать максимально простым и алгоритм исправления ошибок в номере карточки.
Можете придумать и свои критерии к системе кодирования номеров карточек.
226. В данном массиве наименьший элемент поместить на первое место, наименьший из оставшихся - на последнее место, следующий - предпоследнее и так далее - до середины массива.
227. Даны два многочлена P(x) и Q(x). Определить коэффициенты многочлена P(Q(x)).
228. Удалить в заданном массиве элементы так, чтобы оставшиеся образовывали возрастающую последовательность наибольшей длины.
229. В массиве h хранятся значения высот некоторого профиля местности (ее вертикального сечения) с постоянным шагом горизонтали. Найдите области (номера точек измерения высот), невидимые для наблюдателя, находящегося в точке hi.
230. Даны результаты ежедневных измерений количества выпавших осадков. За какую из недель, считая с начала периода измерений, выпало наибольшее количество осадков?
231. Задан массив, состоящий из n неотрицательных чисел. Найдите в нем индекс элемента, для которого сумма элементов, стоящих до него, наименее отличается от суммы элементов, стоящих после него.
232. Данный массив разбить случайным образом на m фрагментов. Границы фрагментов сохранить в новый массив.
233. Реализовать алгоритм перестановки элементов массива a так, чтобы ни один из элементов не остался на своем месте и имел бы одинаковые вероятности занять любое из остальных мест.
234. Имитировать перетасовку колоды карт. Каждая перетасовка состоит из трех этапов: разбиение колоды на две подколоды, выбор в каждой подколоде части, перемешивание выбранных частей, объединение всех карт в одну колоду.
235. Даны n точек на плоскости - точки графика некоторой функции. Найти многочлен, график которого проходит через данные точки.
236. В игре следующие правила. В ряд лежат 25 монет. За ход разрешается брать одну или две рядом лежащие монеты. Проигрывает тот, кому нечего брать. Реализовать возможность игры пользователя с компьютером.
237. Построить множество, которое состоит из дружных чисел на интервале от 1 до 255. Дружными числами называется такая пара натуральных чисел М и N, для которых сумма всех делителей числа М (кроме самого М) равняется числу N, а сумма всех делителей числа N (кроме самого числа N) равняется числу М.
238. Игра начинается с числа 0. За ход можно прибавлять к имеющемуся числу любое число от 1 до 10. Выигрывает получивший число 100. Реализовать возможность игры пользователя с компьютером.
239. В игре следующие правила. Имеется две кучи конфет: в первой – 40, во второй – 45. За ход нужно одну кучу съесть, а другую разделить на две (не обязательно равные). Проигрывает тот, кто не может сделать ход. Реализовать возможность игры пользователя с компьютером.
240. На плоскости заданы n точек своими декартовыми координатами. Найти минимальный периметр многоугольника, содержащего все эти точки. Гарантируется, что искомый многоугольник имеет ненулевую площадь.
241. Вывести все представления натурального числа n суммой натуральных чисел. Перестановка слагаемых нового способа представления не дает.
242. Заданы вес e пустой копилки и вес v копилки с монетами. В копилке могут находиться монеты n видов; известны ценность pi, каждого вида монет и вес wi одной монеты. Найти минимальную и максимальную суммы денег, которые могут находиться в копилке.
243. Даны n целых чисел. Расставить между ними знаки «+» и «-» так, чтобы значение получившегося выражения было равно заданному целому s.
244. Даны координаты n точек на плоскости. Данные точки последовательно соединяем. Предложите способ определения коэффициента от 0 до 1, по которому можно сказать, насколько сильно данная прямая похожа на прямую. Если коэффициент равен 1, то это строго прямая (с точностью используемых типов данных).
245. Многоугольник на плоскости задан целочисленными координатами своих n вершин в декартовой системе координат. Требуется найти число точек с целочисленными координатами, лежащих внутри многоугольника (не на границе). Стороны многоугольника друг с другом не соприкасаются (за исключением соседних — в вершинах) и не пересекаются.
246. Герой компьютерной игры, обладающий силой в 25 баллов, находится в круглом зале, из которого ведут 10 закрытых дверей. За каждой дверью героя ждет либо магический артефакт, дарующий силу от 10 до 80 баллов, либо монстр, имеющий силу от 5 до 100 баллов, с которым герою нужно сразиться. Битву выигрывает персонаж, обладающий наибольшей силой; если силы равны, побеждает герой.
1. Организовать ввод информации о том, что находится за дверями, либо заполнить ее, используя генератор случайных чисел.
2. Вывести эту самую информацию на экран в понятном табличном виде.
3. Посчитать, за сколькими дверями героя ждет смерть. Рекурсивно.
4. Вывести номера дверей в том порядке, в котором следует их открывать герою, чтобы остаться в живых, если такое возможно.
Матрицы
247. Cоздать матрицу 3 x 4, заполнить ее числами 0 и 1 так, чтобы в одной строке была ровно одна единица, и вывести на экран.
248. Создать и вывести на экран матрицу 2 x 3, заполненную случайными числами из [0, 9].
249. Дана матрица. Вывести на экран первый и последний столбцы.
250. Дана матрица. Вывести на экран первую и последнюю строки.
251. Дана матрица. Вывести на экран все четные строки, то есть с четными номерами.
252. Дана матрица. Вывести на экран все нечетные столбцы, у которых первый элемент больше последнего.
253. Дан двухмерный массив 5×5. Найти сумму модулей отрицательных нечетных элементов.
254. Дан двухмерный массив n×m элементов. Определить, сколько раз встречается число 7 среди элементов массива.
255. Дана квадратная матрица. Вывести на экран элементы, стоящие на диагонали.
256. Дана матрица. Вывести k-ю строку и p-й столбец матрицы.
257. Дана матрица размера m x n. Вывести ее элементы в следующем порядке: первая строка справа налево, вторая строка слева направо, третья строка справа налево и так далее.
258. Создать матрицу, состоящую из нулей, за исключением элементов, которые находятся в крайних столбцах и строках - они равны единице.
259. Создать квадратную матрицу, на диагонали которой находятся тройки, выше диагонали находятся двойки, остальные элементы равна единице.
260. Создать квадратную матрицу из случайных чисел из [0, 9], на побочной диагонали которой находятся единицы.
261. Сформировать матрицу n x m, состоящую из нулей и единиц, причем единицы находятся только в угловых клетках.
262. Сформировать квадратную матрицу n x n, на диагонали которой находятся случайные числа из диапазона [1; 9], а остальные числа равны 1.
263. Заполнить матрицу так, чтобы сумма элементов в каждой строке была равна номеру этой строки.
264. Дана целочисленная матрица размера 5×5. Переставить местами 4 и 5 строку.
265. Сформировать матрицу, состоящую из нулей и единиц, причем количество единиц строго равно количеству строк.
266. Даны положительные целые числа m, n и набор из m чисел. Сформировать матрицу размера m x n, у которой в каждом столбце содержатся все числа из исходного набора (в том же порядке).
267. Сформировать матрицу, в каждой строке которой находится ровно один ноль на случайном месте.
268. Сформировать случайную матрицу m x n, состоящую из нулей и единиц, причем в каждом столбце число единиц равно номеру столбца.
269. Найдите сумму всех элементов матрицы.
270. В произвольной матрице отсортировать по убыванию элементы строк, расположенные после второго отрицательного числа.
271. В данной матрице найти наименьший элемент в каждой строке.
272. В матрице поменять местами первую и последнюю строки.
273. Найти количество строк матрицы, числа в которых возрастают.
274. В матрице найти номер строки, в которой произведение чисел минимально.
275. Удалить строку матрицы, в которой количество нулей максимально.
276. Найдите наибольший элемент матрицы и заменить все нечетные элементы на него.
277. Для данной матрицы найдите транспонированную матрицу.
278. Поменять местами столбцы матрицы так, чтобы элементы первой строки оказались упорядоченными.
279. В каждой строке найти наибольший элемент. Из этих элементов найти наименьший и удалить ту строку, которой он принадлежит.
280. Найдите произведение двух данных матриц.
281. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие одновременно выше главной диагонали и ниже побочной диагонали.
282. Дана матрица, содержащая как положительные, так и отрицательные элементы. Удалить все ее столбцы, содержащие только положительные элементы.
283. Дана квадратная матрица. Сформировать новую матрицу, полученную из исходной путем поворота относительно центра на 90о по часовой стрелке.
284. В матрице удалить столбцы с максимальным и минимальным элементами матрицы, а затем на место первого добавить столбец из произведений элементов соответствующих строк.
285. Cформировать массив из элементов в седловых точках матриц. В седловой точке элемент является минимальным в строке и максимальным в столбце.
286. Дана целочисленная квадратная матрица. Указать столбец (назвать его номер) c минимальным количеством элементов, кратных сумме индексов.
287. Удалите строки матрицы, не имеющие ни одного повторяющегося элемента.
288. Дана целочисленная прямоугольная матрица размера n x m. Сформировать одномерный массив, состоящий из элементов, лежащих на отрезке [a,b]. Найти среднее арифметическое полученного одномерного массива.
289. Характеристикой строки матрицы назовём сумму её отрицательных четных элементов. Расположить строки в соответствии с убыванием характеристик.
290. Матрицу m x n заполнить натуральными числами от 1 до mn по спирали, начинающейся в левом верхнем углу и закрученной по часовой стрелке.
291. Матрицу m x n заполнить натуральными числами от 1 до mn по спирали, начинающейся в левом верхнем углу и закрученной против часовой стрелки.
292. Куб состоит из n3 прозрачных и непрозрачных элементарных кубиков. Имеется ли хотя бы один просвет по каждому из трех измерений? Если это так, вывести координаты каждого просвета.
293. В каждом столбце и каждой строке матрицы содержится строго по одному нулевому элементу. Перестановкой строк добиться расположения всех нулей на главной диагонали матрицы. Написать функцию генерации исходной матрицы.
294. Дана целочисленная матрица размера n × m, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк, похожих на первую строку данной матрицы.
295. Дана квадратная матрица, состоящая из натуральных чисел. Зеркально отразить ее элементы относительно побочной диагонали. Вывести результат на экран.
296. Найти максимальный среди элементов тех столбцов, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные столбцы в матрице отсутствуют, то вывести 0.
297. Латинским квадратом порядка n называется квадратная матрица размером n x n, каждая строка и каждый столбец которой содержат все числа от 1 до n. Проверить, является ли заданная матрица латинским квадратом.
298. В трехмерном массиве m x n x p, состоящем из нулей и единиц, хранится сеточное изображение некоторого трехмерного тела. Найдите в двумерных массивах три проекции (тени) этого тела.
299. Поле размером m x n заполнено прозрачными и непрозрачными кубиками. Найдите все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева.
300. Матрица состоит из нулей и единиц. Найдите в ней самую длинную цепочку подряд идущих нулей по горизонтали, вертикали или диагонали.
301. Найдите все числа в матрице, каждое из которых встречается в каждой строке матрицы.
302. Клеточное поле размером m x n является результатом игры в крестики-нолики. Проверить, не закончена ли игра выигрышем "крестиков". Выигрыш наступает при образовании цепочки по горизонтали, вертикали или диагонали из 5 крестиков подряд.
303. В матрице, состоящей из нулей и единиц, найдите квадрат (квадратная подматрица) наибольшего размера, состоящая только из нулей.
304. Две строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках. Найдите все пары похожих строк в заданной матрице.
305. Найдите определитель данной квадратной матрицы методом Гаусса.
306. Найдите матрицу, обратную данной матрицы методом Гаусса.
307. Переставить все элементы данной матрицы случайным образом. Модифицировать алгоритм с учетом требования, чтобы каждый элемент обязательно оказался на новом месте.
308. Переставить строки матрицы случайным образом.
309. Сформировать случайным образом начальную позицию кораблей для игры "морской бой" (всего 15 кораблей, один 5-палубный, два 4-палубных, три 3-палубных, четыре 2-палубных, пять 1-палубных) на поле 10х10 так, чтобы они не касались друг друга.
310. Решить данную систему линейных алгебраических уравнений методом Гаусса.
311. Решить данную систему линейных алгебраических уравнений методом прогонки.
312. Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое соседей соответствующего элемента исходной матрицы. Построить результат сглаживания заданной матрицы
313. Определить, является ли матрица симметричной (относительно главной диагонали). Найти максимальный элемент среди стоящих на главной и побочной диагонали и поменять его местами с элементом, стоящим на пересечении этих диагоналей.
314. Прямоугольный садовый участок шириной n и длиной m метров разбит на квадраты со стороной 1 м. На этом участке вскопаны грядки. Грядкой называется совокупность квадратов, удовлетворяющая таким условиям: 1) из любого квадрата этой грядки можно попасть в любой другой квадрат этой же грядки, последовательно переходя по грядке из квадрата в квадрат через их общую сторону; 2) никакие две грядки не пересекаются и не касаются друг друга ни по вертикальной, ни по горизонтальной сторонам квадратов (касание грядок углами квадратов допускается). Подсчитайте количество грядок на садовом участке.
315. В прямоугольной матрице выявить все подматрицы, в углах которых расположены элементы, из которых можно образовать геометрическую прогрессию.
316. В прямоугольной матрице выявить все квадратные подматрицы, симметричные относительно главной диагонали.
317. Из прямоугольного листа клетчатой бумаги (m строк, n столбцов) удалили некоторые клетки. На сколько кусков распадется оставшаяся часть листа? Две клетки не распадаются, если они имеют общую сторону.
318. В таблице из n строк и n столбцов некоторые клетки заняты шариками, другие свободны. Выбран шарик, который нужно переместить, и место, куда его нужно переместить. Выбранный шарик за один шаг перемещается в соседнюю по горизонтали или вертикали свободную клетку. Требуется выяснить, возможно ли переместить шарик из начальной клетки в заданную, и если возможно, то найти путь из наименьшего количества шагов.
319. Дана матрица n х n, заполненная положительными числами. Путь по матрице начинается в левом верхнем углу. За один ход можно пройти в соседнюю по вертикали или горизонтали клетку (если она существует). Нельзя ходить по диагонали, нельзя оставаться на месте. Требуется найти максимальную сумму чисел, стоящих в клетках по пути длиной К (клетку можно посещать несколько раз).
320. В таблице из n строк и m столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1,1) в клетку (n, m), чтобы сумма цифр в клетках, через которые он пролегает, была минимальной; из любой клетки ходить можно только вниз или вправо.
321. Решить систему линейных алгебраических уравнений методом Холецкого.
Задачи на строки
322. Дана строка. Вывести ее три раза через запятую и показать количество символов в ней.
323. Дана строка. Вывести первый, последний и средний (если он есть)) символы.
324. Дана строка. Вывести первые три символа и последний три символа, если длина строки больше 5. Иначе вывести первый символ столько раз, какова длина строки.
325. Сформировать строку из 10 символов. На четных позициях должны находится четные цифры, на нечетных позициях - буквы.
326. Дана строка. Показать номера символов, совпадающих с последним символом строки.
327. Дана строка. Показать третий, шестой, девятый и так далее символы.
328. Дана строка. Определите общее количество символов '+' и '-' в ней. А так же сколько таких символов, после которых следует цифра ноль.
329. Дана строка. Определите, какой символ в ней встречается раньше: 'x' или 'w'. Если какого-то из символов нет, вывести сообщение об этом.
330. Даны две строки. Вывести большую по длине строку столько раз, на сколько символов отличаются строки.
331. Дана строка. Если она начинается на 'abc', то заменить их на 'www', иначе добавить в конец строки 'zzz'.
332. Дана строка. Если ее длина больше 10, то оставить в строке только первые 6 символов, иначе дополнить строку символами 'o' до длины 12.
333. Дана строка. Разделить строку на фрагменты по три подряд идущих символа. В каждом фрагменте средний символ заменить на случайный символ, не совпадающий ни с одним из символов этого фрагмента. Показать фрагменты, упорядоченные по алфавиту.
334. Дана строка. Заменить каждый четный символ или на 'a', если символ не равен 'a' или 'b', или на 'c' в противном случае.
335. В данной строке найти количество цифр.
336. Дана строка. Определить, содержит ли строка только символы 'a', 'b', 'c' или нет.
337. Замените в строке все вхождения 'word' на 'letter'.
338. Удалите в строке все буквы 'x'. за которыми следует 'abc'.
339. Удалите в строке все 'abc', за которыми следует цифра.
340. Найдите количество вхождения 'aba' в строку.
341. Удалить в строке все лишние пробелы, то есть серии подряд идущих пробелов заменить на одиночные пробелы. Крайние пробелы в строке удалить.
342. Дана строка, состоящая из слов, разделенных символами, которые перечислены во второй строке. Показать все слова.
343. Дан текст. Найдите наибольшее количество идущих подряд цифр.
344. Дан текст. Найти сумму имеющихся в нем цифр.
345. Дан текст. Найти слова, состоящие из цифр, и сумму чисел, которые образуют эти слова.
346. Дан текст. Найдите наибольшее количество подряд идущих пробелов в нем.
347. Даны два слова. Найдите только те символы слов, которые встречаются в обоих словах только один раз.
348. Дан массив строк. Упорядочить массив по длине строк.
349. Дан массив строк. Переставить строки в зависимости от количества цифр в строке.
350. Дана строка. Заменить все символы 'a' и 'b' на 'A' и 'B' соответственно.
351. Дан текст. Сформировать строку из символов, расположенных между первой и второй запятыми данного текста.
352. Дана строка. Удалите k-ый символ в ней.
353. Даны две строки. Определите, содержится ли меньшая по длине строка в большей.
354. Даны две строки. Определите, можно ли из некоторых символов первой строки составить вторую строку.
355. Даны две строки. Определите, можно ли из некоторых символов первой строки и всех символов второй строки составить новую строку, в которой каждый символ встречается ровно два раза.
356. Удалить в строке все цифры.
357. Удалите в строке все символы "!".
358. В строке найдите все серии подряд идущих пробелов и замените каждую на один пробел.
359. Дана строка, состоящая из слов, разделенных пробелами. Определите количество слов в строке.
360. В данной строке вставить после каждого символа 'a' символ 'b'.
361. Даны две строки. Удалить в первой строке первое вхождение второй строки.
362. Дана строка. Определите, является ли она действительным числом.
363. Строка состоит из слов, разделенных одним или несколькими пробелами. Найдите слово наибольшей длины.
364. В строке записано десятичное число. Запишите данное число римскими цифрами.
365. Дан email в строке. Определить, является ли он корректным (наличие символа @ и точки, наличие не менее двух символов после последней точки и т.д.).
366. Написать функцию генерации email.
367. Дано натуральное число. Получить строку, в которой тройки цифр этого числа разделены пробелом, начиная с правого конца. Например, число 1234567 преобразуется в 1 234 567.
368. Вывести слова, в которых заменить каждую большую букву одно-именной малой; удалить все символы, не являющиеся буквами или цифрами; вывести в алфавитном порядке все гласные буквы, входящие в каждое слово строки.
369. Вывести текст, составленный из первых букв всех слов; все слова, содержащие больше одной буквы «s».
370. Вывести в алфавитном порядке все слова, содержащие наибольшее количество гласных букв; найти все слова, в которые буква «а» входит не менее двух раз.
371. Дана строка. Вставить после каждого символа пробел.
372. Дана строка. Вставить после каждого символа два случайных символа.
373. Дана строка. Если в строке больше трех различных символов, то удалить в строке три любых различных символа, иначе добавить в строку в произвольных местах новые элементы так, чтобы количество различных элементов было больше трех.
374. Написать алгоритм генерации пароля. Дополнить программу возможностью определить, сгенерирован ли данный пароль вашим алгоритмом.
375. Написать генерацию строк длины 10, причем первые 4 символа - цифры, следующие два символы - различные буквы, следующие 4 символа - нули или единицы, причем одна единица точно присутствует.
376. Написать генерацию строк длины 12, первые 5 символов которой - четные цифры, следующие 5 символов - буквы 'a' - 'z', следующие 2 символа - "AB", если среди первых пяти символов строки есть цифра 8, "XY" - если нет.
377. Строка состоит из слов, разделенных одним или несколькими пробелами. Поменяйте местами наибольшее по длине слово и наименьшее.
378. Даны два предложения. Для каждого слова первого предложения определите количество его вхождений во второе предложение.
379. Строка состоит из слов, разделенных одним или несколькими пробелами. Переставьте слова в алфавитном порядке.
380. Строка состоит из слов, разделенных одним или несколькими пробелами. Переставьте слова по убыванию их длин.
381. Дана строка, которая содержит натуральные числа, знаки четырех арифметических действий (сложение, вычитание, умножение, деление) и скобки. Вычислите значение выражения.
382. Дана строка, в которой нет начальных и конечных пробелов. Необходимо изменить ее так, чтобы длина строки стала равна заданной длине, больше чем текущая длина строки. Это следует сделать путем вставки между словами дополнительных пробелов. Количество пробелов между отдельными словами не должно отличаться более чем на один пробел (то есть пробелы добавляются равномерно).
383. Дана строка, представляющая из себя арифметическое выражение, состоящее из чисел, скобок и арифметических операций. Проверьте данное выражение на правильность расстановки скобок.
384. Дана строка, содержащая полное имя файла (например, 'c:\WebServers\home\testsite\www\myfile.txt'). Выделите из этой строки имя файла без расширения.
385. Дана строка. Если символы в ней упорядочены по алфавиту, то вывести 'yes', иначе вывести первый символ, нарушающий алфавитный порядок.
386. Дана строка, содержащая буквы и скобки '(', ')', '[', ']', '{', '}'. Если скобки расставлены правильно (то есть каждой открывающей скобки соответствует закрывающая того же вида), то вывести 'yes', иначе вывести номер первой ошибочной скобки или -1, если закрывающая скобка отсутствует.
387. Даны две строки. Выделить из каждой строки наибольшей длины подстроки, состоящие только из цифр, и объедините эти подстроки в одну новую строку.
388. Даны три строки. Заменить все вхождения второй строки в первую на третью строку.
389. Дан текст. Найдите в нем все числа, окруженные пробелами, и добавьте перед ними '<' и после них '>'.
390. Дан текст и список слов. Найти в тексте все слова, каждое из которых отличается от некоторого слова из списка одной буквой, и исправить такие слова на слова из списка.
391. Дан текст. Заменить все цифры соответствующими словами.
392. В данном тексте найдите первую подстроку максимальной длины, которая не содержит букв.
393. Дан текст. Заменить все вхождения наибольшей цифры ее словесным написание.
394. Дана строка. Придумать алгоритм шифрования данной строки и дешифрования.
395. Даны две строки, состоящие из слов, разделенных пробелами. Сформировать строку, состоящую из слов, которые: а) встречаются хотя бы в одной строке; б) встречаются только в первой строке; в) встречаются только в одной из строк.
396. Дана строка, состоящая из слов, разделенных пробелами. Сформировать новую строку со следующими свойствами: а) все слова в нижнем регистре, кроме первой буквы первого слова; б) все ссылки в словах заменяются на "[ссылка запрещена]"; в) все email заменяются на "[контакты запрещены]"; г) все слова длины более 3 символов, содержащие только цифры, удаляются.
397. В сообщении, состоящем из одних русских букв и пробелов, каждую букву заменили ее порядковым номером в русском алфавите (А — 1, Б — 2, ..., Я — 33), а пробел — нулем. Требуется по заданной последовательности цифр найти количество исходных сообщений, из которых она могла получиться. Материал сайта www.itmathrepetitor.ru
398. Непустая строка, содержащая некоторое слово, называется палиндромом, если это слово одинаково читается как слева направо, так и справа налево. Пусть дана строка, в которой записано слово s, состоящее из n прописных букв латинского алфавита. Вычеркиванием из этого слова некоторого набора символов можно получить строку, которая будет палиндромом. Требуется найти количество способов вычеркивания из данного слова некоторого (возможно, пустого) набора таких символов, что полученная в результате строка является палиндромом. Способы, различающиеся только порядком вычеркивания символов, считаются одинаковыми.
399. Даны две строки s и w, вывести строку х максимальной длины, состоящую из букв, таких, что существует перестановка х, являющаяся подстрокой перестановки s и одновременно являющаяся подстрокой перестановки w.
400. Исключить из строки группы символов, расположенные между символами «/*», «*/» включая границы . Предполагается, что нет вложенных скобок.
401. Если заданный текст является правильной записью римскими цифрами целого числа от 1 до 1999, то получить это число.
402. Заданное натуральное число от 1 до 1999 вывести римскими цифрами.
403. Из заданного текста выбрать и напечатать те символы, которые встречаются в нем ровно два раза (в том порядке, как они встречаются в тексте).
404. Проверить, соблюдается ли в заданном тексте баланс открывающих и закрывающих круглых скобок, то есть можно ли установить взаимно однозначное соответствие открывающих и закрывающих скобок, причем открывающая скобка всегда предшествует соответствующей закрывающей.
405. Для встречающихся в заданном тексте пар рядом расположенных символов указать, сколько раз встречается в тексте каждое из таких двухбуквенных сочетаний.
406. Определить является ли введенный текст записью целого числа, записью вещественного числа.
407. Написать программу получения строки, в которой удалены все «лишние» пробелы, то есть из нескольких подряд идущих пробелов оставить только один.
408. Написать программу, которая осуществляет сравнение двух строк.
409. Найти самое длинное симметричное слово заданного предложения.
410. Написать программу, реализующую процедуру удаления k символов с позиции номер n из строки S.
411. Написать программу, реализующую процедуру конкатенации k строк.
412. Дана строка, содержащая текст и арифметические выражения вида: a + b , a – b , a * b и a / b, где a, b - числа. Выписать из нее все арифметические выражения и вычислить их значения.
413. Написать программу, которая преобразует введенное число (целое или вещественное) в соответствующую строку символов.
414. Вывести слова строки, начинающиеся и заканчивающиеся одной и той же буквой; которые содержат ровно три буквы «k».
415. Вывести слова, в которых нет повторяющихся букв; буквы упорядочены по алфавиту; с длиной, максимальной в этой строке.
416. Вывести слово, наиболее часто встречающееся в строке; последовательность слов, в которых буквы упорядочены по алфавиту.
417. Перечислить все слова заданного предложения, которые состоят из тех же букв, что и первое слово предложения.
418. В заданном предложении найти пару слов, из которых одно является обращением другого (обращение – слово, получающееся из исходного записью его букв в обратном порядке).
419. Дан английский текст из комбинаций цифр и английских букв, разделенных знаками препинания. Под словами будем понимать последовательности английских букв, ограниченные знаками препинания. Необходимо найти количество слов, у которых гласные буквы (a, e, i, o, u, y) чередуются с согласными (такие слова состоят минимум из двух букв). Регистр не учитывать.
420. Расстояние между двумя словами равной длины – количество букв, в которых различаются эти слова. В заданном предложении найти пару наиболее далеко удаленных слов заданной длины.
421. В предложении все слова начинаются с различных букв. Напечатать (если можно) слова предложения в таком порядке, чтобы последняя буква каждого слова совпадала с первой буквой следующего слова.
422. Определить самое длинное общее слово двух заданных предложений.
423. Даны три предложения. Определить самое длинное из слов первого предложения, которое есть во втором и третьем предложении.
424. Отредактировать заданное предложение, удаляя из него слова, которые встречаются в предложении n раз.
425. Некоторые числа можно получить так: взять единицу, а затем либо умножать результат на 3, либо прибавлять к результату 5. Например, число 24 получается как (((1*3)+5)*3). Написать функцию, которая для данного числа создает строку с таким выражением.
426.Переставить и вывести на экран слова заданного предложения в соответствии с ростом доли согласных в этих словах.
427. Дан некоторый текст. Изменить текст следующим образом: если после буквы «р», которая является не предпоследней в слове, напечатана буква «а», то заменить ее на букву «о».
428. Даны два текста. Придумать численную характеристику, показывающую насколько близки данные предложения по смыслу и написанию. Проверить эту характеристику на следующей задаче. Имеется несколько различных текстов. Необходимо определить, добавить ли к ним еще один. Новый текст стоит добавлять только, если он достаточно отличен от уже имеющихся.
429. Даны два текста. Первый соответствует содержанию номера газеты. Второй соответствует содержанию записки о выкупе, слова в которой целиком вырезаны из газеты. Определите, можно ли составить записку о выкупе с помощью газеты, текст которой дан.
430. Даны n строк, содержащие названия видов автомобилей без повторений. На парковке свободно m последовательных мест. Найдите все возможные варианты разместить на них автомобили (количество автомобилей каждого вида не менее m).
431. Дана строка, которое содержит квадратное уравнение, состоящая из цифр, символа умножения '*', символа 'x' неизвестной, символов '+', '-', '='. Найдите корни данного уравнения.
432. Реализуйте метод, осуществляющий сжатие строки на основе счетчика повторяющихся символов. Например, строка aaabbcccc должна превратиться в a3b2c5. Если сжатая строка оказалась длиннее исходной, то результатом работы алгоритма должна быть исходная строка. Решить задачу с предположением, что в исходной строке нет цифр. Решить задачи для произвольной строки.
433. Даны две строки. Можно ли первую строку получить из второй циклическим сдвигом?
434. Даны строки, в каждой из которых содержится сначала натуральное число, а затем некоторое слово. Выполнить сортировку строк по числу, а строки с одинаковыми числами упорядочить по слову.
435. Дана строка, содержащая сумму натуральных чисел. Найдите результат вычислений.
436. В заданном списке слов найдите самое длинное слово, образованное другими словами, входящими в список. Например, для слов dog, cat, mouse, dogcat, mouseandcat ответом является слово dogcat.
437. Для двух слов одинаковой длины напишите метод, трансформирующий одно слово в другое. изменяя одну букву за один шаг. Каждое новое слово должно присутствовать в словаре, то есть в заданном списке допустимых слов. Например, для слов dump и like можно построить такую цепочку действий: dump, lamp, limp, lime, like. Слова lamp, limp, lime есть в словаре.
438. Даны слова из букв и цифр, записанные в столбик, который выровнен по первой букве. Определите, существует ли прямоугольник из символов этого столбика, граница которого состоит из цифр.
439. Дан текст. Определите частоту (отношение между количеством вхождений и общим количеством троек) триграмм (троек символов). Статистика должна определяться отдельно для русского и английского алфавита. В алфавиты необходимо добавить псевдосимвол, означающий любой пробельный символ (пробел, запятая, точка и так далее). При подсчете статистики последовательность пробельных символов считать одним пробельным символом. Регистр не учитывать.
440. К вам попал зашифрованный текст, означающий большую истину для многих программистов. Расшифруйте его, то есть предложите способ восстановления исходного текста и найдите этот текст. vujgvmCfb tj ufscfu ouib z/vhm jdjuFyqm jt fscfuu uibo jdju/jnqm fTjnqm tj scfuuf ibou fy/dpnqm yDpnqmf jt cfuufs boui dbufe/dpnqmj uGmb tj fuufsc ouib oftufe/ bstfTq jt uufscf uibo otf/ef uzSfbebcjmj vout/dp djbmTqf dbtft (ubsfo djbmtqf hifopv up csfbl ifu t/svmf ipvhiBmu zqsbdujdbmju fbutc uz/qvsj Fsspst tipvme wfsof qbtt foumz/tjm omfttV mjdjumzfyq odfe/tjmf Jo fui dfgb pg hvjuz-bncj gvtfsf fui ubujpoufnq up ftt/hv Uifsf vmetip fc pof.. boe sbcmzqsfgf zpom pof pvt..pcwj xbz pu pe ju/ Bmuipvhi uibu bzx bzn puo cf wjpvtpc bu jstug ttvomf sfzpv( i/Evud xOp tj scfuuf ibou /ofwfs uipvhiBm fsofw jt fopgu cfuufs boui iu++sjh x/op gJ ifu nfoubujpojnqmf tj eibs pu mbjo-fyq tju( b bec /jefb Jg fui foubujpojnqmfn jt fbtz up bjo-fyqm ju znb cf b hppe jefb/ bnftqbdftO bsf pof ipoljoh sfbuh efbj .. fu(tm pe psfn gp tf"uip
441. Шифр "Вставка в середину". Дан текст. Осуществить шифрование и дешифрование следующим образом: текст разбивается на группы из четного количества элементов, в каждой группе символы переставляются некоторым образом (например, записываются в обратном порядке) и в середину добавляются n случайных символов, далее переставляются сами группы символов.
442. Шифр "Сэндвич". Дан текст. Осуществить шифрование и дешифрование следующим образом: текст разбивается на две одинаковых по количеству символов части и результатом шифрования является строка, в которой символы из первой части чередуются символами из второй части.
443. Способ кодирования сообщений заключается в следующем: каждой букве русского алфавита мы ставим в соответствие последовательность из 0 и 1 длины 6, которая есть запись в двоичной системе счисления порядкового номера буквы русского алфавита. Если двоичная запись содержит меньше 6 нулей и единиц, то мы дописываем слева нули, чтобы получилась последовательность длины 6. Например, буква «Я» имеет порядковый номер 33. Это число в двоичной системе счисления равно 100001. Буква «Г» имеет порядковый номер 4, в двоичной системе счисления это 100. Теперь дописываем слева нулями до 6 цифр, получаем последовательность 000100, которая будет соответствовать букве «Г». Пробел между словами кодируется последовательностью 000000. Дальше делаем следующее: делим буквы на пары (с начала сообщения), каждую букву сообщения по указанному правилу переводим в последовательность 0 и 1, получаем двоичные числа (из 12 цифр), соответствующие каждой паре. Переводим эти числа в десятичную запись. Полученная последовательность десятичных чисел будет представлять из себя зашифрованное послание. Зашифруйте таким способом слово «СЕРВЕР». Ответ должен содержать три десятичных числа (первое – для пары букв СЕ, второе – для РВ, третье – для ЕР). Материал сайта www.itmathrepetitor.ru
444. Определите ключ шифра сдвига, которым зашифровано одно из, возможно самых знаменитых, изречений Гая Юлия Цезаря: MVEZ MZUZ MZTZ Ответ представьте в виде целого числа.
445. Зашифрованный стих. Каждая буква фрагмента сказки А.С. Пушкина заменена некоторой буквой так, что разным буквам соответствуют разные буквы, а одинаковым — одинаковые. Пробелы и знаки препинания сохранены. Найдите цепочку букв, в которую преобразуется слово ОЛИМПИАДА при той же самой замене.
Бтсвбр ел ибвн анжмс,
Гвлъ ел бтсвбрн тсбмс
Т залсбгалрыим цнвкрлим,
Т снвнилим ъл тлълим;
Наь влтснс пнвнъ ърбвцби,
Л пбъ енй хвутслаьеый ъби;
Онакл сли жмрнс вучелд,
Ъл злснйемцл клклд!
Онакл пнтнекм пбнс
Ъл бвншкм ртн гвызнс,
Л бвншкм ен пвбтсын,
Ртн ткбваупкм збабсын
446. Диск Альберти. Для зашифрования текста использовался вращающийся диск, центр которого находится на оси, закрепленной на неподвижном основании. Диск разделен на 32 равных сектора, в которые в неизвестном порядке вписаны все буквы русского алфавита (по одной в каждый сектор; буквы Е и Ё не различаются). На основании, по одной напротив каждого сектора, выписаны буквы в алфавитном порядке по часовой стрелке. Каждое положение диска, получающееся из исходного поворотом на угол, кратный величине сектора, задает соответствие между буквами на основании и на диске. При зашифровании очередной буквы текста ее заменяли соответствующей ей буквой при текущем положении диска, после чего диск поворачивался на один сектор по часовой стрелке. Укажите, какой из фрагментов полученного шифртекста
У Ш Ц Ш М Ь Г Р У Н В И О Ь Х Ь З Ж
И Х С ЖЫ Р О Р Л Й Я О Ш К Ь Э З Д О Е
может соответствовать слову ШИФРАТОР в исходном тексте:
В И О Ь Х Ь З Ж
У Ш Ц Ш М Ь Г Р
О Ш К Ь Э З Д О
Ж Ы Р О Р Л Й Я
О Р Л Й Я О Ш К
447. Способ кодирования сообщений заключается в следующем: каждой букве русского алфавита мы ставим в соответствие последовательность из 0 и 1 длины 6, которая есть запись в двоичной системе счисления порядкового номера буквы русского алфавита. Если двоичная запись содержит меньше 6 нулей и единиц, то мы дописываем слева нули, чтобы получилась последовательность длины 6. Например, буква «Я» имеет порядковый номер 33. Это число в двоичной системе счисления равно 100001. Буква «Г» имеет порядковый номер 4, в двоичной системе счисления это 100. Теперь дописываем слева нулями до 6 цифр, получаем последовательность 000100, которая будет соответствовать букве «Г». Пробел между словами кодируется последовательностью 000000. Дальше делаем следующее: делим буквы на пары (с начала сообщения), каждую букву сообщения по указанному правилу переводим в последовательность 0 и 1, получаем двоичные числа (из 12 цифр), соответствующие каждой паре. Переводим эти числа в десятичную запись. Полученная последовательность десятичных чисел будет представлять из себя зашифрованное послание. Зашифруйте таким способом слово «СЕРВЕР». Ответ должен содержать три десятичных числа (первое – для пары букв СЕ, второе – для РВ, третье – для ЕР). Зашифруйте произвольное сообщение.
448. Дан массив названий переменных в camelCase. Преобразовать названия в snake_case.
ЗАДАЧИ НА ФАЙЛЫ
449. Дан текстовый файл, содержащий целые числа. Удалить из него все четные числа.
450. В данном текстовом файле удалить все слова, которые содержат хотя бы одну цифру.
451. Дан текстовый файл. Создать новый файл, каждая строка которого получается из соответствующей строки исходного файла перестановкой слов в обратном порядке.
452. Дан текстовый файл. Создать новый файл, состоящий из тех строк исходного файла, из чисел которых можно составить арифметическую прогрессию.
453. Даны два текстовых файла, содержащие целые числа. Создать файл из различных чисел, которые содержатся: а) в каждом исходном файле; б) только в одном из двух исходных файлов; в) только в первом исходном файле; г) хотя бы в одном из двух исходных файлов.
454. Создать и заполнить файл случайными целыми значениями. Выполнить сортировку содержимого файла по возрастанию.
455. Cоздать типизированный файл записей со сведениями о телефонах абонентов; каждая запись имеет поля: фамилия абонента, год установки телефона, номер телефона. По заданной фамилии абонента выдать номера его телефонов. Определить количество установленных телефонов с N-го года.
456. В текстовый файл занесены пары чисел, разделенных пробелом (каждая пара чисел – в новой строке). Рассматривая каждую пару как координаты точек на плоскости, найти наибольшее и наименьшее расстояния между этими точками.
457. Имеется файл с текстом. Осуществить шифрование данного текста в новый файл путем записи текста в матрицу символов по строкам, а затем чтение символов из этой матрицы по столбцам. Осуществить расшифровку полученного текста.
458. Создать программу, переписывающую в текстовый файл g содержимое файла f, исключая пустые строки, а остальные дополнить справа пробелами или ограничить до n символов.
459. В файле, содержащем фамилии студентов и их оценки, изменить на прописные буквы фамилии тех студентов, которые имеют средний балл за национальной шкалой более «4».
460. Из текстового файла удалить все слова, содержащие от трех до пяти символов, но при этом из каждой строки должно быть удалено только четное количество таких слов.
461. Получить файл g, состоящий из строк файла f, содержащих заданную строку S. Предусмотреть случай, когда строка размещается в двух строках файла «с переносом».
462. Получить файл g, в котором текст выровнен по правому краю путем равномерного добавления пробелов.
463. Из текста программы выбрать все числа (целые и вещественные) и записать их в файл g в виде: число 1 – номер строки, число 2 – номер строки и так далее.
464. Определить, симметричен ли заданный во входном файле текст.
465. Текстовый файл содержит записи о телефонах и их владельцах. Переписать в другой файл телефоны тех владельцев, фамилии которых начинаются с букв К и С.
466. Текстовый файл содержит квадратную матрицу, которая записана по принципу: одна строка файла – одна строка матрицы. Необходимо построить двухмерный массив и вывести на экран исходную матрицу и результат ее транспонирования.
467. Текстовый файл содержит квадратную матрицу, которая записана по принципу: одна строка – один элемент матрицы. Необходимо определить размерность матрицы и построить двухмерный массив. Вывести на экран исходную матрицу и результат ее поворота на 90º по часовой стрелке.
468. Данные о планшетном сканеры состоят из наименования модели, цены, оптического разрешения, числа градаций серого, горизонтальный и вертикальный размеры области сканирования. Написать функцию, которая записывает в бинарный файл данные о сканере из приведенной структуры. Структура файла: в первых двух байтах размещается значение типа int, определяющее количество сделанных в файл записей; далее без пропусков размещаются записи о сканерах. Написать функцию, которая извлекает из этого файла данные о сканере в структуру типа scaninfo. Обязательный параметр — номер требуемой записи. Функция должна возвращать нулевое значение, если чтение прошло успешно, и -1 в противном случае.
469. Дан текстовый файл со статистикой посещения сайта за неделю. Каждая строка содержит ip адрес, время и название дня недели (например, 139.18.150.126 23:12:44 sunday). Создайте новый текстовый файл, который бы содержал список ip без повторений из первого файла. Для каждого ip укажите количество посещений в неделю, наиболее популярный день недели, наиболее популярный отрезок времени длиной в один час. Последней строкой в файле добавьте наиболее популярный отрезок времени в сутках длиной один час в целом для сайта.
470. В текстовом файле записан текст, сбалансированный по круглым скобкам. Требуется для каждой пары соответствующих открывающей и закрывающей скобок вывести номера позиций в тексте, упорядочив пары номеров в порядке возрастания номеров позиций открывающих скобок.
471. В файле содержится совокупность текстовых строк. Изменить первую букву каждого слова на заглавную.
472. Дан файл со списком слов. Разработайте алгоритм, создающий максимально возможный прямоугольник из букв так, чтобы каждая строка и каждый столбец образовывали слово (при чтении слева направо и сверху вниз). Слова могут выбираться в любом порядке, строки должны быть одинаковой длины, столбцы - одинаковой высоты.
473. Даны дан файл с текстом и слово. Внедрить слово в файл так, чтобы не был заметен сам факт внедрения (после самостоятельных попыток решения ищите материал по теме "стеганография" и реализуйте классические алгоритмы).
474. В файле содержится текстовая строка. Определить частоту повторяемости каждой буквы в тексте и вывести ее.
475. База данных heap.dat. Структура записей: номер изделия, наименование изделия, количество изделий, цена 1 изделия, стоимость. Обработка следующих запросов: - по номеру изделия выдать справку о наличии его на складе; - выдать общую стоимость всех изделий, хранящихся на складе - выдать список всех изделий c номерами в заданном интервале; - найти изделие с самой большой ценой. - выдать список изделий на складе, наименование которых начинается с заданной буквы.
476. В базе bus.dat хранятся записи, содержащие: номер маршрута, начало маршрута, конец маршрута, тип автобуса, количество автобусов на линии, номер автобазы. Обеспечить выдачу следующих справок: - определить общее число городских автобусов; - по номеру автобуса определить его маршрут; - выдать список номеров автобусов, маршруты которых проходят через заданный пункт; - выдать список маршрутов, которые обслуживает автобаза с указанным номером.
477. Клавиатурный почерк. Дан файл с данными, которые характеризуют как пользователь набирает текст. Что именно представляют из себя эти данные, необходимо придумать самостоятельно. Есть второй файл с аналогичными данными. Требуется определить, принадлежат ли данные из второго файла этому же пользователю. Другими словами, необходимо разработать теорию и программу по идентификации человека по стилю его работы на клавиатуре.
478. Расписание занятий. Дан файл со списком преподавателей, списком предметов и с данными о максимальном количество занятий в день, о количестве часов в неделю по каждому предмету. В день не может быть более одного занятия по данному предмету. Желательно занятия по данному предмету равномерно распределять на неделе. Написать программу генерации расписания занятий. Можно также учесть пожелания преподавателей.
479. Даны два слова и словарь. Требуется построить цепочку слов от первого слова до второго, в котором каждые два соседних слова принадлежат словарю и отличаются только в одной букве.
Итоговые задачи перед изучением ООП
Задачи, которые надо уметь решать до того, как приступать к изучению идей объектно-ориентированного программирования (ООП), то есть до изучения классов.
480. Компьютер загадывает число от 1 до n. У пользователя k попыток отгадать. После каждой неудачной попытки компьютер сообщает меньше или больше загаданное число. В конце игры текст с результатом (или “Вы угадали”, или “Попытки закончились”).
481. Найти количество различных элементов массива. Пример: для 1 4 5 1 1 3 ответ 4.
482. Дан массив. Перемешать его элементы случайным образом так, чтобы каждый элемент оказался на новом месте.
483. Куб состоит из n^3 прозрачных и непрозрачных элементарных кубиков. Имеется ли хотя бы один просвет по каждому из трех измерений? Если это так, вывести координаты каждого просвета. Куб задается трехмерной матрицей из 0 и 1.
484. Дано предложение. Заменить группы пробелов одиночными, крайние пробелы удалить. Все слова перевести в нижний регистр, первые буквы сделать заглавными.
485. Дана строка. Заменить все ссылки и email на ***** (количество звездочек равно длине заменяемого фрагмента). Примеры ссылок: www.site.com, http://site.com и т.п. Решить двумя способами: с использованием регулярных выражений и без. Сравнить скорости работы.
486. Пользователь вводит формулу вида max(a,b) или min(a,b), где a,b - целые числа или аналогичные выражения min(), max(). Найти значение выражения. Примеры: max(1,5) = 5, max(4,min(3,6)) = 4, min(max(1,max(5,3)),min(9,0)) = 0.
487. Уроки по математике проводятся через день. Если урок попадает на воскресенье, то переносится на понедельник. Пользователь вводит дату первого урока. Сгенерируйте расписание из дат на текущий месяц.
Задачи на классы
488. Создайте структуру с именем student, содержащую поля: фамилия и инициалы, номер группы, успеваемость (массив из пяти элементов). Создать массив из десяти элементов такого типа, упорядочить записи по возрастанию среднего балла. Добавить возможность вывода фамилий и номеров групп студентов, имеющих оценки, равные только 4 или 5.
489. Создайте структуру с именем train, содержащую поля: название пункта назначения, номер поезда, время отправления. Ввести данные в массив из пяти элементов типа train, упорядочить элементы по номерам поездов. Добавить возможность вывода информации о поезде, номер которого введен пользователем. Добавить возможность сортировки массив по пункту назначения, причем поезда с одинаковыми пунктами назначения должны быть упорядочены по времени отправления.
490. Создать класс с двумя переменными. Добавить функцию вывода на экран и функцию изменения этих переменных. Добавить функцию, которая находит сумму значений этих переменных, и функцию которая находит наибольшее значение из этих двух переменных.
491. Описать класс, реализующий десятичный счетчик, который может увеличивать или уменьшать свое значение на единицу в заданном диапазоне. Предусмотреть инициализацию счетчика значениями по умолчанию и произвольными значениями. Счетчик имеет два метода: увеличения и уменьшения, — и свойство, позволяющее получить его текущее состояние. Написать программу, демонстрирующую все возможности класса.
492. Создать класс с двумя переменными. Добавить конструктор с входными параметрами. Добавить конструктор, инициализирующий члены класса по умолчанию. Добавить деструктор, выводящий на экран сообщение об удалении объекта.
493. Создать класс, содержащий динамический массив и количество элементов в нем. Добавить конструктор, который выделяет память под заданное количество элементов, и деструктор. Добавить методы, позволяющие заполнять массив случайными числами, переставлять в данном массиве элементы в случайном порядке, находить количество различных элементов в массиве, выводить массив на экран.
494. Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть контроль выхода за пределы массива, возможность обращения к отдельным строкам массива по индексам, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, а также вывод на экран элемента массива по заданному индексу и всего массива.
495. Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов. Предусмотреть методы для вычисления значения многочлена для заданного аргумента, операции сложения, вычитания и умножения многочленов с получением нового объекта-многочлена, вывод на экран описания многочлена.
496. Построить три класса (базовый и 3 потомка), описывающих некоторых хищных животных (один из потомков), всеядных(второй потомок) и травоядных (третий потомок). Описать в базовом классе абстрактный метод для расчета количества и типа пищи, необходимого для пропитания животного в зоопарке.
a) Упорядочить всю последовательность животных по убыванию количества пищи. При совпадении значений – упорядочивать данные по алфавиту по имени. Вывести идентификатор животного, имя, тип и количество потребляемой пищи для всех элементов списка.
b) Вывести первые 5 имен животных из полученного в пункте а) списка.
c) Вывести последние 3 идентификатора животных из полученного в пункте а) списка.
d) Организовать запись и чтение коллекции в/из файл.
e) Организовать обработку некорректного формата входного файла.
497. Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку (например, по автору или по году издания), добавления книг в библиотеку, удаления книг из нее, сортировки книг по разным полям.
498. Составить описание класса прямоугольников со сторонами, параллельными осям координат. Предусмотреть возможность перемещения прямоугольников на плоскости, изменение размеров, построение наименьшего прямоугольника, содержащего два заданных прямоугольника, и прямоугольника, являющегося общей частью (пересечением) двух прямоугольников.
499. Создать класс для хранения комплексных чисел. Реализовать операции над комплексными числами: сложение, вычитание, умножение, деление, сопряжение, возведение в степень, извлечение корня. Предусмотреть возможность изменения формы записи комплексного числа: алгебраическая форма, тригонометрическая форма, экспоненциальная форма.
500. Составить описание класса для представления времени. Предусмотреть возможности установки времени и изменения его отдельных полей (час, минута, секунда) с проверкой допустимости вводимых значений. В случае недопустимых значений полей выбрасываются исключения. Создать методы изменения времени на заданное количество часов, минут и секунд.
501. Составить описание класса для вектора, заданного координатами его концов в трехмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами.
502. Описать класс, представляющий треугольник. Предусмотреть методы для создания объектов, вычисления площади, периметра и точки пересечения медиан. Описать свойства для получения состояния объекта.
503. Создать абстрактный класс Figure с методами вычисления площади и периметра, а также методом, выводящим информацию о фигуре на экран. Создать производные классы: Rectangle (прямоугольник), Circle (круг), Triangle (треугольник) со своими методами вычисления площади и периметра.Создать массив n фигур и вывести полную информацию о фигурах на экран.
504. Класс Покупатель: Фамилия, Имя, Отчество, Адрес, Номер кредитной карточки, Номер банковского счета; Конструктор; Методы: установка значений атрибутов, получение значений атрибутов, вывод информации. Создать массив объектов данного класса. Вывести список покупателей в алфавитном порядке и список покупателей, у которых номер кредитной карточки находится в заданном диапазоне.
505. Класс Абонент: Идентификационный номер, Фамилия, Имя, Отчество, Адрес, Номер кредитной карточки, Дебет, Кредит, Время междугородных и городских переговоров; Конструктор; Методы: установка значений атрибутов, получение значений атрибутов, вывод информации. Создать массив объектов данного класса. Вывести сведения относительно абонентов, у которых время городских переговоров превышает заданное. Сведения относительно абонентов, которые пользовались междугородной связью. Список абонентов в алфавитном порядке.
506. Задача на взаимодействие между классами. Разработать систему «Автобаза». Диспетчер распределяет заявки на Рейсы между Водителями и назначает для этого Автомобиль. Водитель может сделать заявку на ремонт. Диспетчер может отстранить Водителя от работы. Водитель делает отметку о выполнении Рейса и состоянии Автомобиля.
507. Задача на взаимодействие между классами. Разработать систему «Железнодорожная касса». Пассажир делает заявку на станцию назначения, время и дату поездки. Система регистрирует Заявку и осуществляет поиск соответствующего Поезда. Пассажир делает выбор Поезда и получает Счет на оплату. Кассир вводит номера Поездов, промежуточные и конечные станции, цены.
508. Задача на взаимодействие между классами. Разработать систему «Интернет-магазин». Товаровед добавляет информацию о Товаре. Клиент делает и оплачивает Заказ на Товары. Товаровед регистрирует Продажу и может занести неплательщика в «черный список».
509. Задача на взаимодействие между классами. Разработать систему «Платежи». Клиент имеет Счет в банке и Банковскую карту (КК). Клиент может оплатить Заказ, сделать платеж на другой Счет, заблокировать КК и аннулировать Счет. Администратор может заблокировать КК за превышение платежа.
510. Задача на взаимодействие между классами. Разработать систему «Вступительные экзамены». Абитуриент регистрируется на Факультет, сдает Экзамены. Преподаватель выставляет Оценку. Система подсчитывает средний бал и определяет Абитуриента, зачисленного в учебное заведение.
511. Разработать класс «Калькулятор логарифмов»с возможностью сложения, вычитания, умножения, деления, возведения в степень и перехода к другому основанию. Программа должна выполнять ввод данных, проверку правильности введенных данных, выдачу сообщений в случае ошибок. Протокол работы калькулятора записать в файл. Предусмотреть возможность просмотра файла из программы.
512. Аквариум
1. Определите объект TFish - аквариумная рыбка. Рыбка имеет координаты, скорость, размер, цвет, направление движения. Методами объекта являются:
Init - устанавливает значения полей объекта и рисует рыбу на экране методом Draw. Draw - рисует рыбу (виртуальный метод).
Look - проверяет несколько точек на линии движения рыбы. Если хоть одна из них отличается по цвету от воды, возвращается её цвет и расстояние до рыбы.
Run - перемещает рыбу в текущем направлении на расстояние, зависящее от текущей скорости рыбы. Иногда случайным образом меняет направление движения рыбы. Если рыба видит препятствие, направление движения меняется, пока препятствие не исчезнет из поля зрения рыбы.
2. Определите объект Taquarium, который является местом обитания рыб. Он представляет собой область экрана, наполненную водой.
Методы:
Init - включает графический режим, заполняет аквариум водой, скалами и рыбами. Run - организует бесконечный цикл, в котором выполняется метод Run всех обитателей аквариума.
Done - выключает графический режим.
3. Определите два объекта Tpike и Tkarp, которые наследуют объект Tfish.
4. Карпы и щуки должны быть объединены в стаи. Стая - это связанный список рыб в динамической памяти. Для связи в объектах Tpike и Tkarp используйте поле Next - указатель на следующую рыбу в стае. Аквариум должен быть владельцем двух стай. Пользователь может пополнять стаи, вводя рыб с клавиатуры.
5. Щуки должны поедать карпов, как только они их увидят. Необходимо установить, какого именно карпа видит щука (ближайший по координатам карп к щуке, найденный карп удаляется из стаи).
513. Разработка приложения для предметной области «Учёт товаров в магазине»
Разработать приложение, позволяющее собирать и накапливать сведения о поступлении и реализации товаров некоторого магазина. Структура приложения обязательно должна включать следующие классы: товар, производитель, документ, поступление товара, реализация товара и др.
514. Разработка приложения для предметной области «Организация учебного процесса в ВУЗе»
Разработать приложение, позволяющее собирать и накапливать сведения об организации и диспетчеризации учебного процесса в ВУЗе. Структура приложения обязательно должна включать следующие классы: академическая группа, специальность, дисциплина, аудитория, преподаватель и др.
515. Транспортное агентство
Разработайте программу, имитирующую работу трансагентства. Трансагентство имеет сеть филиалов в нескольких городах. Транспортировка грузов осуществляется между этими городами тремя видами транспорта: автомобильным, железнодорожным и воздушным. Любой вид транспортировки имеет стоимость единицы веса на единицу пути и скорость доставки. Воздушный транспорт можно использовать только между крупными городами, этот вид самый скоростной и самый дорогой. Кроме того, воздушный транспорт зависит от погоды. Доставить груз воздушным путем можно только при условии хорошей погоды одновременно в городах отправки и назначения. Хорошая или плохая погода задается случайным образом. Железнодорожный транспорт можно использовать между крупными и средними городами, этот вид самый дешевый. Автомобильный транспорт можно использовать между любыми городами. Заказчики через случайные промежутки времени обращаются в один из филиалов трансагентства с заказом на перевозку определенной массы груза и возможным пожеланием о скорости/цене доставки. Трансагентство организует отправку грузов одним из видов транспорта с учетом пожеланий клиента. Оплату трансагенство получает только после успешной доставки груза. Между некоторыми городами для железнодорожного и/или автомобильного транспорта имеются скоростные магистрали, на которых скорость соответствующего вида транспорта увеличивается с заданным коэффициентом. При перевозке грузов могут происходить аварии, при этом вероятность аварии на автотранспорте больше, чем на железнодорожном транспорте, а авиатранспорт имеет аварийность очень низкую. На скоростных магистралях вероятность аварии меньше, чем на обычных дорогах. При аварии трансагентство возвращает заказчику двойную стоимость перевозки.
Процесс имитации может быть остановлен пользователем программы для просмотра параметров объектов:
Доход трансагенства, в том числе с разбивкой по видам транспорта и городам.
Среднее время доставки груза, в том числе с разбивкой по видам транспорта и городам.
Потери, связанные с плохой погодой.
Потери, связанные с аварийностью, в том числе с разбивкой по видам транспорта и по видам дорог.
Доход на тонно-километр скоростных магистралей в сравнении с таким же доход на обычных дорогах.
Список исполняемых заказов с возможность сортировки по городам, видам транспорта, стоимости перевозки.
Список задерживаемых заказов в связи с плохой погодой.
(Разработать и реализовать классы, которые являются основными в задании. Для сдачи лабораторной работы необходимо создать проект, в котором демонстрируется работа объектов созданных классов. Должны быть продемонстрированы выполнение конструктора, всех доступных методов и деструктора.)
516. Разработать класс для работы с файлами СУБД dBase (DBF файлы). Реализовать основные операции (подключение, чтение данных, модификация данных, перемещение по записям, пометка на удаление, сжатие таблицы, добавление данных).
517. Задача для С++. Реализуйте шаблонный класс Polynomial (Многочлен от одной переменной) на основе контейнера std::vector. Тип коэффициентов многочлена передавайте в качестве параметра шаблона. Хранение коэффициентов должно быть плотным (то есть должны храниться все коэффициенты, в том числе и промежуточные нулевые).
Сделайте следующее:
1) Напишите конструктор, создающий многочлен по заданному вектору коэффициентов (коэффициенты задаются от младшего к старшим).
2) Перегрузите операторы == и !=. Ваш код должен быть очень простым.
3) Перегрузите операторы +, - и *, а также соответствующие операторы +=, -= и *=. Учтите, что должны быть определены и такие арифметические операции, в которых один из аргументов является скаляром.
4) Перегрузите оператор [] для получения коэффициента многочлена перед заданной степенью переменной. Оператор должен работать для любых степеней (в том числе больших текущей максимальной). Напишите также функцию Degree для вычисления степени многочлена (считайте, что у нулевого многочлена степень равна -1).
5) Перегрузите оператор () для вычисления значения многочлена в точке. Постарайтесь написать эффективный код.
6) Перегрузите оператор << для печати многочлена в поток вывода. При этом следует учитывать знаки коэффициентов, совпадение коэффициентов с 1 или -1, степень монома и т. д. Печататься должны только ненулевые коэффициенты многочлена начиная со старшей степени. Пример формата вывода: -x^3+4x^2+x-1.
7) Предусмотрите функции для доступа к константным итераторам, позволяющим перебрать коэффициенты многочлена (это могут быть просто итераторы вектора).
8) Перегрузите операторы / и % для вычисления неполного частного и остатка от деления многочленов (считайте, что в этом случае деление коэффициентов допустимо). Перегрузите также оператор "запятая" для вычисления наибольшего общего делителя. Так как НОД многочленов определен с точностью до обратимого коэффициента, считайте, что его старший коэффициент равен единице. Считайте также, что все операции деления над коэффициентами выполняются точно.
518. Создать класс машина, имеющий марку (указатель на строку) , число цилиндров, мощность. Определить конструкторы, деструктор и функцию печати. Создать public- производный класс – грузовики, имеющий грузоподъемность кузова. Определить конструкторы по умолчанию и с разным числом параметров, деструкторы, функцию печати. Определить функции переназначения марки и грузоподъемности.
Задачи на списки
519. Односвязный (однонаправленный список)
- Инициализация списка
- Добавление элемента в начало списка
- Добавление элемента в конец списка
- Показ всех элементов списка
- Удаление всех элементов списка
- Определение количества элементов списка
- Проверка списка на пустоту
- Удаление первого элемента
- Удаление последнего элемента
- Поиск данного значения в списке
- Поиск наибольшего и наименьшего значений в списке
- Удаление элемента списка с данным значением
- Удаление всех элементов списка с данным значением
- Изменение всех элементов списка с данным значением на новое.
- Определение, является ли список симметричным.
- Определение, можно ли удалить из списка каких-нибудь два элемента так, чтобы новый список оказался упорядоченным.
- Определение, сколько различных значений содержится в списке.
- Удаление из списка элементов, значения которых уже встречались в предыдущих элементах.
- Изменение порядка элементов на обратный.
- Сортировка элементов списка двумя способами (изменение указателей, изменение значений элементов)
520. Двусвязный (двунаправленный) список. Список функций аналогичен предыдущей задаче.
521. Дан упорядоченный список книг. Добавить новую книгу, сохранив упорядоченность списка.
522. Даны два упорядоченных по невозрастанию списка. Объедините их в новый упорядоченный по невозрастанию список.
523. Дан список целых чисел. Упорядочьте по возрастанию только: а) положительные числа; б) элементы с четными порядковыми номерами в списке.
524. Даны два списка. Определите, совпадают ли множества их элементов.
525. Дан список. После каждого элемента добавьте предшествующую ему часть списка.
526. Пусть элементы списка хранят символы предложения. Замените каждое вхождение слова "itmathrepetitor" на "silence".
527. Дан текстовый файл. Создайте двусвязный список, каждый элемент которого содержит количество символов в соответствующей строке текста.
528. Создайте двусвязный список групп факультета. Каждая группа представляет собой односвязный список студентов.
529. Дан список студентов. Элемент списка содержит фамилию, имя, отчество, год рождения, курс, номер группы, оценки по пяти предметам. Упорядочите студентов по курсу, причем студенты одного курса располагались в алфавитном порядке. Найдите средний балл каждой группы по каждому предмету. Определите самого старшего студента и самого младшего студентов. Для каждой группы найдите лучшего с точки зрения успеваемости студента.
Структуры данных и их применение
530. Задача связности. Предположим, что имеется последовательность пар целых чисел (пара p-q интерпретируется в значении "р связано с q"). Если р связано с q, a q связано с r, то р связано с r. Задача состоит в написании программы для исключения лишних пар из набора: когда программа получает очередную пару р-q, она должна добавлять эту пару только в том случае, если из предыдущих пар не следует, что что р связано с q. Пример: 3-4, 4-9, 8-0, 2-3, 5-6. К данному списку 2-9 не добавляем, так как 2-3-4-9.
531. Создать список из заданного количества элементов. Выполнить циклический сдвиг этого списка на N элементов вправо или влево.
532. Реализовать с помощью однонаправленного линейного списка операцию умножения длинного целого числа на N (целую цифру, то есть целое число от 0 до 9).
533. Исходный файл содержит два набора положительных значений, между наборами стоит отрицательное значение. Построить два списка С1 и С2, элементы которых содержат значение из наборов 1 и 2 соответственно. Элементы расположить по возрастанию. Выполнить соединение списков
534. Создать два стека и поменять информацию местами.
535. Исходный файл содержит наименование некоторых объектов. Построить список, элементы которого содержат наименование и шифры данных объектов, причем элементы списка должны быть упорядочены по возрастанию значений шифров. Выполнить «сжатие» списка, удалив продублированные наименования объектов.
536. Задано множество точек на двухмерной плоскости. Найти три разные точки, которые составляют треугольник наибольшего периметра. Структуру данных "множество" реализовать в виде класса.
537. Задано множество точек на двухмерной плоскости. Найти такую точку, от которой сумма расстояние к другим точкам наименьшая. Структуру данных "множество" реализовать в виде класса.
538. На плоскости заданы N множеств по M точек в каждой. Найти среди точек первого множества такую точку, которая принадлежит наибольшему количеству множеств. Структуру данных "множество" реализовать в виде класса.
539. Создать список из стихов одного автора. Выполнить сортировку списка по возрастанию размера стихов.
540. Ввести некоторое число и записать его цифры в стек. Вывести число, у которого цифры идут в обратном порядке. Предусмотреть возможность введения произвольного количества чисел.
541. Система состоит из трех процессоров P1, P2, P3, очереди F, стека S и распределителя задач R. В систему поступают запросы на выполнение задач трёх типов – T1, T2 и T3, каждая для своего процессора.Поступающие запросы ставятся в очередь. Если в начале очереди находится задача Ti и процессор Pi свободен, то распределитель R ставит задачу на выполнение в процессор Pi, а если процессор Pi занят, то распределитель R отправляет задачу в стек и из очереди извлекается следующая задача. Если в вершине стека находится задача, процессор которой в данный момент свободен, то эта задача извлекается и отправляется на выполнение. Осуществить моделирование работы данной системы.
542. Задано два списка, которые содержат результаты N-измерений тока (I) и напряжения (U) на неизвестном сопротивлении (R). Найти приближенное значение R методом наименьших квадратов.
543. Организовать хеш-таблицу с открытой адресацией, используя процедуру поиска и вставки по ключу. Для формирования начального хеш-адреса использовать метод деления, а затем при возникновении коллизии процедуру квадратичного исследования.
544. Написать программу, определяющую является ли двоичное дерево деревом поиска.
545. Имеется дерево, корень которого соответствует основателю рода. Сыновья каждой вершины задают сыновей и дочерей соответствующего человека. Указываются имена двух человек (например, А и В) . Сообщить, какая из следующих ситуаций имеет место:
1) А предок В;
2) В предок А;
3) А и В имееют ближайшего общего предка С.
546. При запуске программы в консоли должно открыться меню с выбором "Работа со списками" или "Работа с деревьями". При выборе какого-либо из пунктов должно открыться подменю. Подменю "Работа со списками" должно включать в себя пункты: "Включить новый элемент после i-ого по номеру элемента", "Исключить элемент после i-ого по номеру элемента", "Поменять местами i-ый и i-ый+1 по номерам элементы". Подменю "Работа с деревьями" должно выполнять следующие действия: создание бинарного дерева (дерева поиска) в диалоге с пользователем (способ формирования дерева: с учётом значений ключа), обход бинарного дерева каждым из трёх способов с выдачей на экран содержимого информационных полей, включение элемента в бинарное дерево (согласно алгоритму формирования дерева), удаление заданного узла из дерева (без поддерева), удаление дерева с освобождением памяти, вывод дерева на экран. А так же определить количество листьев на заданном уровне дерева, определить количество узлов (не листьев) бинарного дерева.
547. Составить программу для построения и обработки дерева общего вида или упорядоченного двоичного дерева, содержащего узлы целого типа. После того как дерево, создано с ним можно выполнять следующие действия:
Добавление нового узла (для двоичного дерева положение нового узла определяется в соответствии с требованием сохранения порядка, для дерева общего вида должен задаваться путь до добавляемого узла, добавляемый узел становится младшим сыном).
Текстовая визуализация дерева (значение каждого узла выводится на отдельной строке, с отступом пропорциональным глубине узла (шаг отступа равен двум пробелам), в порядке старшинства узлов).
Удаление узла (двоичное дерево перестраивается в соответствии с требованием сохранения целостности и порядка; для дерева общего вида удаляется все поддерево, исходящее из удаляемого узла; должно быть предусмотрено корректное освобождение памяти). Определение числа вершин, степень которых совпадает со степенью дерева.
548. Задан граф (орграф) в виде матрицы смежности. Составить программу
а) проверки, есть ли в графе петли;
б) поиска в графе изолированной вершины (не смежной с другими);
в) определения степени графа;
г) получения последовательности ребер.
549. Запрограммировать структуры данных и операции над ними для представления графа в виде
а) последовательности ребер (дуг),
б) векторов смежности,
в) матрицы смежности,
г) списков смежности,
д) матрицы весов,
е) сети,
ж) матрицы инцидентности,
з)списковой структуры.
Необходимые детали представления уточнить самостоятельно.
550. Дан граф (орграф). Составить описание данных для его представления и фрагмент программы
а) получения кратчайших путей и расстояний между всеми вершинами по алгоритму Флойда и вывода кратчайшего пути от вершины А до вершины В.
б) получения матрицы связности по алгоритму Уоршалла и вывода номеров вершин каждой компоненты связности графа.
551. Разработать программу, выполняющую обработку данных на основе рекурсивных алгоритмов.
Дано N городов и известны расстояния между ними. Не все города связаны друг с другом дорогой. Найти все возможные маршруты из города А в город В (ни в один город не заходить дважды). Определить самый длинный и самый короткий маршрут.
552. Система двусторонних дорог такова, что для любой пары городов можно указать соединяющий их путь. Найдите такой город, сумма расстояний от которого до остальных городов минимальна.
553. Для заданной системы двусторонних дорог определите, можно ли, закрыв какие-нибудь три дороги, запретить перемещение из города А в город Б.
554. Дана система двусторонних дорог. N-периферией называется множество городов, расстояние от которых до выделенного города (столицы) больше N. Для данного N определите N-периферию.
555. Определите, можно ли в данной системе двусторонних дорог проехать из города А в город B так, чтобы посетить город С и не проезжать ни по какой дороге более одного раза.
556. За проезд по каждой дороге взымается некоторая пошлина. Найдите путь из города А в город B с минимальной величиной S+P, где S - сумма длин дорог пути, а P - сумма пошлин проезжаемых дорог.
557. Найдите медиану графа, то есть такую его вершину, что сумма расстояний от нее до остальных вершин минимальна.
558. Разработать класс B-дерево для хранения объектов, обладающих ключом с операцией сравнения. При реализации следует пользоваться статическим полиморфизмом на основе шаблонов.
ЗАДАЧИ ПО АЛГОРИТМАМ И СТРУКТУРАМ ДАННЫХ НА СОБЕСЕДОВАНИЯХ
- Напишите функцию, которая переставляет значения переменных без использования временных переменных.
- Напишите метод, находящий максимальное из двух чисел без использования if-else или любых других операторов сравнения.
- Реализуйте алгоритм, определяющий, все ли символы в строке встречаются только один раз. А если при этом запрещено использование дополнительных структур данных?
- Для двух строк напишите метод, определяющий, является ли одна строка перестановкой другой.
- Реализуйте метод для выполнения простейшего сжатия строк с использованием счетчика повторяющихся символов. Например, строка ааbсссссааа превращается в а2b1с5а3. Если сжатая строка не становится короче исходной, то метод возвращает исходную строку. Предполагается, что строка состоит только из букв верхнего и нижнего регистра (a-z).
- Задано целое число. Выведите его значение в текстовом виде (например, одна тысяча двести тридцать четыре).
- Напишите алгоритм, реализующий следующее условие: если элемент матрицы MxN равен 0, то весь столбец и вся строка обнуляются.
- Что такое разреженная матрица? Предложите структуры данных для хранения и выполнения операций с такими матрицами.
- Напишите код для удаления дубликатов из несортированного связного списка.
- Реализуйте алгоритм для нахождения в односвязном списке k-го элемента с конца.
- В каких случаях выгоднее использовать массивы, а в каких - списки? Приведите примеры.
- Для кольцевого связного списка реализуйте алгоритм, возвращающий начальный узел петли. Кольцевой связный список - это связный список, в котором указатель следующего узла ссылается на более ранний узел, образуя петлю. Пример: A->B- >C->D->E->C (предыдущий узел C) Вывод: C
- Опишите, как бы вы использовали один одномерный массив для реализации трех стеков.
- Какие варианты разрешения коллизий в хеш-таблице?
- Как реализовать стек, в котором кроме стандартных функций push и рор будет поддерживаться функция min, возвращающая минимальный элемент? Все операции - push, рор и min - должны выполняться за время O(1).
- Как известно, слишком высокая стопка тарелок может развалиться. Следовательно, в реальной жизни, когда высота стопки превысила бы некоторое пороговое значение, мы начали бы складывать тарелки в новую стопку. Реализуйте структуру данных SetOfStacks, имитирующую реальную ситуацию. Структура SetOfStack должна состоять из нескольких стеков, новый стек создается, как только предыдущий достигнет порогового значения. Методы SetOfStacks.push ( ) и SetOfStacks.рор( ) должны вести себя так же, как при работе с одним стеком (то есть метод рор( ) должен возвращать те же значения, которые бы он возвращал при использовании одного большого стека).
- Для заданного направленного графа разработайте алгоритм, проверяющий существование маршрута между двумя узлами.
- Напишите алгоритм создания бинарного дерева поиска с минимальной высотой для отсортированного (по возрастанию) массива с уникальными целочисленными элементами.
- Реализуйте функцию, проверяющую сбалансированность бинарного дерева. Будем считать дерево сбалансированным, если разница высот двух поддеревьев любого узла не превышает 1.
- Реализуйте функцию для проверки того, является ли бинарное дерево бинарным деревом поиска.
- В чем суть алгоритма Дейкстры?
- Т1 и Т2 - два очень больших бинарных дерева, причем Т1 значительно больше Т2. Создайте алгоритм, проверяющий, является ли Т2 поддеревом Тl. Дерево Т2 считается поддеревом Tl, если существует такой узел n в Тl, что поддерево, «растущее» из n, идентично дереву Т2. (Иначе говоря, если вырезать дерево в узле n, оно будет идентично Т2.)
- Дано бинарное дерево, в котором каждый узел содержит целое число (положительное или отрицательное). Разработайте алгоритм для подсчета всех путей, сумма значений которых соответствует заданной величине. Обратите внимание, что путь не обязан начинаться или заканчиваться в корневом или листовом узле, но он должен идти вниз (переходя только от родительских узлов к дочерним).
- Дано вещественное число в интервале между 0 и 1 (например, 0,72), которое передается в формате double. Выведите его двоичное представление. Если для точного двоичного представления числа не хватает 32 разрядов, выведите сообщение об ошибке.
- Имеется целое число, в котором можно изменить ровно один бит из 0 в 1. Напишите код для определения длины самой длинной последовательности единиц, которая может быть при этом получена.
- Напишите программу, меняющую местами четные и нечетные биты числа с минимальным количеством инструкций (например, меняются местами биты 0 и 1, биты 2 и 3 и т. д.).
- Предложите алгоритм генерации случайных чисел.
- Реализуйте метод rand7( ) на базе метода rand5( ) . Другими словами, имеется метод, генерирующий случайные числа в диапазоне от 0 до 4 (включительно). Напишите метод, который использует его для генерирования случайного числа в диапазоне от 0 до 6 (включительно).
- Разработайте структуры данных для универсальной колоды карт. Объясните, как разделить структуры данных на субклассы, чтобы реализовать игру в блэкджек.
- Разработайте модель автостоянки, используя принципы ООП.
- Разработайте структуры данных для онлайн-библиотеки.
- Как бы вы подошли к проектированию чат-сервера? Предоставьте информацию о компонентах внутренней подсистемы (backend), классах и методах. Перечислите самые трудные задачи, которые необходимо решить.
- Объясните, какие структуры данных и алгоритмы вы бы использовали для разработки файловой системы, хранящейся в оперативной памяти. Напишите программный код, иллюстрирующий использование этих алгоритмов.
- Спроектируйте и реализуйте хеш-таблицу, использующую связные списки для обработки коллизий.
- Ребенок поднимается по лестнице из n ступенек. За один шаг он может переместиться на одну, две или три ступеньки. Реализуйте метод, рассчитывающий количество возможных вариантов перемещения ребенка по лестнице.
- Робот стоит в левом верхнем углу сетки, состоящей из r строк и k столбцов. Робот может перемещаться в двух направлениях: вправо и вниз, но некоторые ячейки сетки заблокированы, то есть робот через них проходить не может. Разработайте алгоритм построения маршрута от левого верхнего до правого нижнего угла.
- Напишите метод для вычисления всех перестановок строки, состоящей из уникальных символов.
- Дано неограниченное количество монет достоинством 25, 1 0, 5 и 1 цент. Напишите код, определяющий количество способов представления n центов.
- Напишите алгоритм, находящий все варианты расстановки восьми ферзей на шахматной доске размером 8х8 так, чтобы никакие две фигуры не располагались на одной горизонтали, вертикали или диагонали (учитываются не только две главные, но и все остальные диагонали)
- Имеются 10 миллиардов URL-aдpecoв. Как обнаружить все дублирующиеся документы? Дубликатом в данном случае считается совпадение URL-aдpecoв.
- Опишите словами алгоритм сортировки пузырьком, далее напишите код.
- Опишите словами алгоритм сортировки вставками, далее напишите код.
- Приведите несколько итераций алгоритма сортировки выбором на конкретном массиве.
- Опишите словами алгоритм быстрой сортировки, напишите код.
- Имеются два отсортированных массива А и В. В конце массива А существует свободное место, достаточное для размещения массива В. Напишите метод слияния массивов В и А, сохраняющий сортировку.
- Напишите метод сортировки массива строк, при котором анаграммы группируются друг за другом.
- Имеется файл размером 20 Гбайт, состоящий из строк. Как бы вы выполнили сортировку такого файла?
- Имеется входной файл с четырьмя миллиардами неотрицательных целых чисел. Предложите алгоритм для генерирования целого числа, отсутствующего в файле. Считайте, что для выполнения операции доступен 1 Гбайт памяти.
- Для заданной матрицы MxN, в которой каждая строка и столбец отсортированы по возрастанию, напишите метод поиска элемента
- Вам предоставили исходный код приложения, которое аварийно завершается после запуска. После десяти запусков в отладчике вы обнаруживаете, что каждый раз программа завершается в разных местах. Приложение однопотоковое и использует только стандартную библиотеку С. Какие ошибки могут вызвать сбой приложения? Как вы организуете тестирование?
- Как вы проведете нагрузочный тест веб-страницы без использования специальных инструментов тестирования?
- Для двух отрезков, заданных координатами начальной и конечной точек, вычислите координаты точки пересечения (если она существует).
- Разработайте алгоритм, проверяющий результат игры в крестики-нолики (3х3).
Тестовые задачи перед собеседованиями
Frontend-разработчик (стажер)
1. В примере кода разработайте реализацию функции sumUpDiagonals() на JavaScript таким образом, чтобы она возвращала суммы основной и вторичной диагоналей квадратной матрицы.var matrixExample = [
[ 1, 2, 3, 4 ],
[ 4, 5, 6, 5 ],
[ 7, 8, 9, 7 ],
[ 7, 8, 9, 7 ]
];
function sumUpDiagonals(matrix) {
// ...
}
console.log(sumUpDiagonals(matrixExample))
2. Разработайте юнит-тесты проверяющие корректность работы функции. Удалось ли найти какие-либо дефекты в этой функции, полагаясь на ее назначение исходя из описания? Учтите, что вопрос не на знание фреймворков тестирования и их применение, можете взять любой, или даже разработать ряд самостоятельных функций.
function isEven(number) {
// Returns True if **number** is even or False if it is odd.
return number % 2;
}
3. Техническое задание на разработку приложения по добавлению и сохранению заметок
Разработайте приложение по добавлению и сохранению заметок. В приложении должно быть несколько экранов.
Приложение должно содержать:
Экран авторизации.
Экран со списком заметок.
Экран или модальное окно с формой добавления заметки.Список заметок должен содержать:
Дату создания
Сколько времени прошло со времени создания. 1 мин, 1 час, день и тд.
Название
ОписаниеОбратите внимание что дата должна быть с учетом часового пояса. К примеру, пользователь создал заметку в Санкт-Петербурге, прилетел в Бостон где открыл заметки, а в поле "сколько времени прошло с момента создания" прошедший интервал отображается корректно.Плюсом будет реализация фильтрации по колонкам.На бекенде и фронтенде можно использовать что угодно.
Для БД можно использовать сервис https://firebase.google.com/.Выложите исходники на github, в README опишите что нужно сделать чтобы запустить ваш проект.
Backend-разработчик на javascript (стажер)
1. В примере кода генерируется неупорядоченный массив забитых мячей в течении матча вида event = [{offset: n, score: [x, y]}, ...]
Разработайте функцию getScore(offset), которая вернет счет на момент offset вида {home: x, away: y}.
const event = []let currentHomeScore = 0
let currentAwayScore = 0// Events' populating
for (let i = 0; i < 5400; i += ~~(Math.random() * 5) + 1) {
const shouldAddScore = ~~(Math.random() * 300) % 230 === 0if (shouldAddScore) {
if (currentHomeScore > currentAwayScore) {
currentAwayScore++
} else {
currentHomeScore++
}
}if (~~(Math.random() * 10) % 2 === 0) {
event.push({
offset: i,
score: [currentHomeScore, currentAwayScore]
})
} else {
event.unshift({
offset: i,
score: [currentHomeScore, currentAwayScore]
})
}
}// Implement this according to the task
const getScore = offset => {
}
2. Разработайте юнит-тесты проверяющие корректность работы функции. Удалось ли найти какие-либо дефекты в этой функции, полагаясь на ее назначение исходя из описания? Учтите, что вопрос не на знание фреймворков тестирования и их применение, можете взять любой, или даже разработать ряд самостоятельных функций. function isEven(number) {
// Returns True if **number** is even or False if it is odd.
return number % 2;
}
Преобразуйте файл books.csv в файл books.json, сгруппировав при этом книги по авторам, как показано в примере. Разделитель в csv-файле символ "точка с запятой" (";"), первая строка - названия столбцов. books.csv Title; Author; Annotation
Don Quixote; Miguel de Cervantes; Alonso Quixano, a retired country gentleman in his fifties
Crime and Punishment; Fyodor Dostoyevsky; It is a murder story, told from a murders point of view
The Odyssey; Homer; The Odyssey is one of two major ancient Greek epic poems attributed to Homer
The Brothers Karamazov; Fyodor Dostoyevsky; Dostoevsky's last and greatest novel, The Karamazov Brothers books.json {
"authors": [
{
"author": "Miguel de Cervantes",
"books": [
{
"title": "Don Quixote",
"description": "Alonso Quixano, a retired country gentleman in his fifties"
}
]
},
{
"author": "Fyodor Dostoyevsky",
"books": [
{
"title": "Crime and Punishment",
"description": "It is a murder story, told from a murders point of view"
},
{
"title": "The Brothers Karamazov",
"description": "Dostoevsky's last and greatest novel, The Karamazov Brothers"
}
]
},
{
"author": "Homer",
"books": [
{
"title": "The Odyssey",
"description": "The Odyssey is one of two major ancient Greek epic poems attributed to Homer"
}
]
}
]
}
Backend-разработчик на python (стажер)
1. В примере кода продолжите функцию live_search() на Python таким образом, чтобы она возвращала список товаров (список объектов Product упакованные в JSON в произвольном формате) которые содержат строку q в полях sku, name или description в любом регистре символов.
from django.db import modelsclass Product(models.Model):
categories = models.ManyToManyField(Category,
related_name='products',
blank=True, verbose_name=u"категории")
related_products = models.ManyToManyField('Product',
blank=True,
verbose_name="связанные продукты")sku = models.CharField(u'артикул', max_length=128, validators=[validators.check_bad_symbols], unique=True)price = models.DecimalField(u'цена', max_digits=12, decimal_places=4)slug = models.SlugField(u'slug', max_length=80, db_index=True, unique=True)name = models.CharField(u'название', max_length=128)
title = models.CharField(u'заголовок страницы (<title>)', max_length=256, blank=True)
description = models.TextField(u'описание', blank=True)def live_search(request, template_name="shop/livesearch_results.html"):
q = request.GET.get("q", "")
# ...
2. Разработайте юнит-тесты проверяющие корректность работы функции. Удалось ли найти какие-либо дефекты в этой функции, полагаясь на ее назначение исходя из описания? Учтите, что вопрос не на знание фреймворков тестирования и их применение, можете взять любой, или даже разработать ряд самостоятельных функций. def is_even(number):
''' Returns True if **number** is even or False if it is odd. '''
return number % 2
3. Разработайте скрипт на Python, который будет выводить в консоль (STDOUT) информацию о предстоящих событиях анонсированных на главной странице python.org (Upcoming Events). Вывод информации оформите по своему усмотрению. Выбор библиотек на ваше усмотрение.
Backend-разработчик на php (junior)
1. Цель:
- Разработать REST API (CRUD) сервис.
- Создание элементов
- Обновление элементов
- Удаление элементов
- Получение информации о элементе
- Валидацию полей сущности
- Создать автоматические тесты созданного функционала
- Покрытие тестами должно составлять до 90% кода
- Тестами покрывается и функционал и БД
- Возможное дополнение: (будет плюсом, но не обязательно)
- Интерфейс для работы с сущностью
- Использование token для доступа к данным
- История изменений сущностиВводные данные:
Сущность: Item
Поля сущности:
id - int автоинкремент
name - char(255)
key - char(25) not null
created_at - datetime - дата создания элемента
updated_at - datetime - дата обновления элементаСтек технологий: PHP7, Laravel, PHPUnut, UI Kit (Bootstrap, Semantic-UI)Тестовое задание необходимо выложить на репозитории, GitHub, Bitbucket дать доступ, если приватный репозиторий.
2. Разработать web приложение доставки питания по подписке. В приложении можно создавать заказы и просматривать созданные заказы
Поля заказа:
1) ФИО клиента
2) телефон клиента
3) дата создания заказа
4) название рациона питания
5) период доставки (с даты по дату)
6) расписание доставки (варианты: ежедневная, доставка через день на один день питания, доставка через день на 2 дня питания)
7) дни недели питания (с пн по вскр, можно выбрать любое сочетание дней)
8) комментарий
При создании заказа должно формироваться расписание доставки с учетом условий 5, 6 и 7 и отображаться при просмотре заказа (в виде списка дней с количеством рационов питания, которые нужно доставить в этот день, или календаря).
Пример1: период 07.10.2021-14.10.2021, ежедневная доставка, дни питания понедельник-пятница. Подписка должна получиться: 7.10.2021, 8.10.2021, 11.10.2021-14.10.2021. Всего будет доставлено 6 порций.
Пример2: период 08.10.2021-17.10.2021, доставка через день на 2 дня питания, дни питания понедельник-пятница. Подписка должна получиться: 08.10.2021 - 1 порция, 12.10.2021 - 2 порции, 14.10.2021 - 2 порции. Всего будет доставлено 5 порций.
Приложение реализовать на PHP и JavaScript, можно использовать любые библиотеки и фреймворки.
Необходимо приложить инструкцию как запустить приложение, включая предварительную настройку окружения.
3.
1) Функционал страницы регистрации:
- Форма регистрации с такими полями:Username;
Phone number. - После регистрации пользователь получает сгенерированную уникальную ссылку на главную страницу, доступ к которой будет доступен в течение семи дней по этой уникальной ссылке. После истечения времени - ссылка становится недействительной.
2) Функционал главной страницы:
- Кнопка копирования своей уникальной ссылки;
- Кнопка для генерирования новой уникальной ссылки;
- Кнопка для деактивации текущей уникальной ссылки;
- Кнопка "Im feeling lucky". После нажатия на кнопку "Im feeling lucky" пользователю выводиться:
- Случайное число от 1 до 1000;
- Результат Win/Lose. Если случайное число четное - выводить пользователю результат Win. В противном случае выводить пользователю результат Lose;
- Сумма Win:Если случайное число более 900, сумма выигрыша должна составлять 70% от случайного числа;
Если случайное число более 600, сумма выигрыша должна составлять 50% от случайного числа;
Если случайное число более 300, сумма выигрыша должна составлять 30% от случайного числа;
Если случайное число менее 300, сумма выигрыша должна составлять 10% от случайного числа. - Кнопка History. После нажатия на кнопку "History" пользователю выводиться информация о последних 3-х результатах нажатия на кнопку "Im feeling lucky".
3) Работа с БД:
В БД должны храниться данные:
- Зарегистрированных пользователей;
- Результатов нажатий на кнопку "Im feeling lucky".
4) Админ. панель:
В админ. панели необходимо реализовать следующие функции:
- Список всех пользователей;
- Редактирование пользователя;
- Создание пользователя;
- Удаление пользователя.
4. Нужно написать справочник по музыкальным альбомам.
Модели:
- Исполнитель:Имя/Название;
Фотография (файл с изображением). - Альбом:Название;
Описание;
Исполнитель;
Обложка (файл с изображением).
4 экрана:
- 1-й экран: список альбомов:название,
исполнитель,
описание,
обложка,
с фильтрацией по исполнителю,
и пагинацией: 5 записей на экране. - 2-й экран: форма редактирования/создания/удаления альбома:В форме должна быть возможность предзаполнения полей исполнитель, описание, обложка по названию альбома из API last.fm.
Редактировать форму может только авторизованный пользователь.
Изменения данных о пластинке необходимо логировать. - 3-й экран: список исполнителей:имя/название,
фотография (файл с изображением),
с фильтрацией по имени,
и пагинацией: 5 записей на экране. - 4-й экран: форма редактирования/создания/удаления исполнителя.В форме должна быть возможность предзаполнения по имени/названию исполнителя (фотография) из API last.fm.
Редактировать форму может только авторизованный пользователь.
Изменения данных по пластинке необходимо логировать.
Дополнительно:
- Сделать нужно с использованием Laravel.
- СУБД можно использовать любую.
- При удалении модели — удалять изображения.
Нюансы, которые не описаны в задании сделай на своё усмотрение или задай вопрос.
Требования к результату:
- Ссылка на исходный код в любой общедоступной системе контроля версий;
- Ссылка на демонстрацию приложения в рабочем виде, его нужно развернуть на любом бесплатном (или платном) хостинге.