Перейти к содержанию

Ruby/Задачник

Материал из Викиучебника — открытых книг для открытого мира

Задачи по высокоуровневому программированию (ФГОУ ДПО МЭТТ ГАИ)

[править]
Информация

Эти задачи использовались автоматизированной системой тестирования при проведении контрольных работ по предметам: «Программирование на языке высокого уровня» и «Программное обеспечение компьютерных сетей» в 2006-2007 учебном году.

  1. Дан целочисленный массив. Необходимо вывести вначале его элементы с четными индексами, а затем - с нечетными.
  2. Дан целочисленный массив. Необходимо вывести вначале его элементы с нечетными индексами, а затем - четными.
  3. Дан целочисленный массив. Вывести номер первого из тех его элементов, которые удовлетворяют двойному неравенству: A[0] < A[i] < A[-1]. Если таких элементов нет, то вывести [ ].
  4. Дан целочисленный массив. Вывести номер последнего из тех его элементов, которые удовлетворяют двойному неравенству: A[0] < A[i] < A[-1]. Если таких элементов нет, то вывести [ ].
  5. Дан целочисленный массив. Преобразовать его, прибавив к четным числам первый элемент. Первый и последний элементы массива не изменять.
  6. Дан целочисленный массив. Преобразовать его, прибавив к четным числам последний элемент. Первый и последний элементы массива не изменять.
  7. Дан целочисленный массив. Преобразовать его, прибавив к нечетным числам последний элемент. Первый и последний элементы массива не изменять.
  8. Дан целочисленный массив. Преобразовать его, прибавив к нечетным числам первый элемент. Первый и последний элементы массива не изменять.
  9. Дан целочисленный массив. Заменить все положительные элементы на значение минимального.
  10. Дан целочисленный массив. Заменить все положительные элементы на значение максимального.
  11. Дан целочисленный массив. Заменить все отрицательные элементы на значение минимального.
  12. Дан целочисленный массив. Заменить все отрицательные элементы на значение максимального.
  13. Дан целочисленный массив. Осуществить циклический сдвиг элементов массива влево на одну позицию.
  14. Дан целочисленный массив. Осуществить циклический сдвиг элементов массива вправо на одну позицию.
  15. Дан целочисленный массив. Проверить, образуют ли элементы арифметическую прогрессию. Если да, то вывести разность прогрессии, если нет - вывести nil.
  16. Дан целочисленный массив. Проверить, образуют ли элементы геометрическую прогрессию. Если да, то вывести знаменатель прогрессии, если нет - вывести nil.
  17. Дан целочисленный массив. Найти количество его локальных максимумов.
  18. Дан целочисленный массив. Найти количество его локальных минимумов.
  19. Дан целочисленный массив. Найти максимальный из его локальных максимумов.
  20. Дан целочисленный массив. Найти минимальный из его локальных минимумов.
  21. Дан целочисленный массив. Определить количество участков, на которых его элементы монотонно возрастают.
  22. Дан целочисленный массив. Определить количество участков, на которых его элементы монотонно убывают.
  23. Дано вещественное число R и массив вещественных чисел. Найти элемент массива, который наиболее близок к данному числу.
  24. Дано вещественное число R и массив вещественных чисел. Найти элемент массива, который наименее близок к данному числу.
  25. Дан целочисленный массив. Преобразовать его, вставив перед каждым положительным элементом нулевой элемент.
  26. Дан целочисленный массив. Преобразовать его, вставив перед каждым отрицательным элементом нулевой элемент.
  27. Дан целочисленный массив. Преобразовать его, вставив после каждого положительного элемента нулевой элемент.
  28. Дан целочисленный массив. Преобразовать его, вставив после каждого отрицательного элемента нулевой элемент.
  29. Дан целочисленный массив. Упорядочить его по возрастанию.
  30. Дан целочисленный массив. Упорядочить его по убыванию.
  31. Дан целочисленный массив. Вывести индексы массива в том порядке, в котором соответствующие им элементы образуют убывающую последовательность.
  32. Дан целочисленный массив. Вывести индексы массива в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность.
  33. Дан целочисленный массив. Найти индекс минимального элемента.
  34. Дан целочисленный массив. Найти индекс максимального элемента.
  35. Дан целочисленный массив. Найти индекс первого минимального элемента.
  36. Дан целочисленный массив. Найти индекс первого максимального элемента.
  37. Дан целочисленный массив. Найти индекс последнего минимального элемента.
  38. Дан целочисленный массив. Найти индекс последнего максимального элемента.
  39. Дан целочисленный массив. Найти количество минимальных элементов.
  40. Дан целочисленный массив. Найти количество максимальных элементов.
  41. Дан целочисленный массив. Найти минимальный четный элемент.
  42. Дан целочисленный массив. Найти минимальный нечетный элемент.
  43. Дан целочисленный массив. Найти максимальный четный элемент.
  44. Дан целочисленный массив. Найти максимальный нечетный элемент.
  45. Дан целочисленный массив. Найти минимальный положительный элемент.
  46. Дан целочисленный массив. Найти максимальный отрицательный элемент.
  47. Дан целочисленный массив и интервал a..b. Найти минимальный из элементов в этом интервале.
  48. Дан целочисленный массив и интервал a..b. Найти максимальный из элементов в этом интервале.
  49. Дан целочисленный массив. Найти количество элементов, расположенных перед первым минимальным.
  50. Дан целочисленный массив. Найти количество элементов, расположенных перед первым максимальным.
  51. Дан целочисленный массив. Найти количество элементов, расположенных после первого максимального.
  52. Дан целочисленный массив. Найти количество элементов, расположенных после первого минимального .
  53. Дан целочисленный массив. Найти количество элементов, расположенных перед последним максимальным.
  54. Дан целочисленный массив. Найти количество элементов, расположенных перед последним минимальным.
  55. Дан целочисленный массив. Найти количество элементов, расположенных после последнего максимального.
  56. Дан целочисленный массив. Найти количество элементов, расположенных после последнего минимального .
  57. Дан целочисленный массив. Найти индекс первого экстремального (то есть минимального или максимального) элемента.
  58. Дан целочисленный массив. Найти индекс последнего экстремального (то есть минимального или максимального) элемента.
  59. Дан целочисленный массив. Найти количество элементов, между первым и последним минимальным.
  60. Дан целочисленный массив. Найти количество элементов, между первым и последним максимальным.
  61. Дан целочисленный массив. Найти два наибольших элемента.
  62. Дан целочисленный массив. Найти два наименьших элемента.
  63. Дан целочисленный массив. Найти максимальное количество подряд идущих минимальных элементов.
  64. Дан целочисленный массив. Найти максимальное количество подряд идущих максимальных элементов.
  65. Дан целочисленный массив. Вывести вначале все его четные элементы, а затем - нечетные.
  66. Дан целочисленный массив. Вывести вначале все его нечетные элементы, а затем - четные.
  67. Дан целочисленный массив. Проверить, чередуются ли в нем четные и нечетные числа.
  68. Дан целочисленный массив. Проверить, чередуются ли в нем положительные и отрицательные числа.
  69. Дано вещественное число R и массив вещественных чисел. Найти два элемента массива, сумма которых наиболее близка к данному числу.
  70. Дано вещественное число R и массив вещественных чисел. Найти два элемента массива, сумма которых наименее близка к данному числу.
  71. Дан целочисленный массив. Удалить все элементы, встречающиеся менее двух раз.
  72. Дан целочисленный массив. Удалить все элементы, встречающиеся более двух раз.
  73. Дан целочисленный массив. Удалить все элементы, встречающиеся ровно два раза.
  74. Дан целочисленный массив. Удалить все элементы, встречающиеся ровно три раза.
  75. Дан целочисленный массив. Найти среднее арифметическое модулей его элементов.
  76. Дан целочисленный массив. Найти среднее арифметическое квадратов его элементов.
  77. Дано целое число. Найти сумму его цифр.
  78. Дано целое число. Найти произведение его цифр.
  79. Дан целочисленный массив. Возвести в квадрат отрицательные элементы и в третью степень - положительные. Нулевые элементы - не изменять.
  80. Дан дипапазон a..b. Получить массив из чисел, расположенных в этом диапазоне (исключая сами эти числа), в порядке их возрастания, а также размер этого массива.
  81. Дан дипапазон a..b. Получить массив из чисел, расположенных в этом диапазоне (исключая сами эти числа), в порядке их убывания, а также размер этого массива.
  82. Дано число А и натуральное число N. Найти результат следующего выражения 1 + А + А*2 + А*3 + … + А*N.
  83. Дано число А и натуральное число N. Найти результат следующего выражения 1 - А + А*2 - А*3 + … + ((-1)**N)*А*N.
  84. Дано натуральное число N. Найти результат следующего произведения 1*2*…*N.
  85. Дано натуральное число N. Если N - нечетное, то найти произведение 1*3*…*N; если N - четное, то найти произведение 2*4*…*N.
  86. Дан целочисленный массив. Найти среднее арифметическое его элементов.
  87. Дан целочисленный массив. Найти все четные элементы.
  88. Дан целочисленный массив. Найти количество четных элементов.
  89. Дан целочисленный массив. Найти все нечетные элементы.
  90. Дан целочисленный массив. Найти количество нечетных элементов.
  91. Дан целочисленный массив и число К. Если существует элемент, меньший К, то вывести true; в противном случае вывести false.
  92. Дан целочисленный массив и число К. Если существует элемент, больший К, то вывести true; в противном случае вывести false.
  93. Дан целочисленный массив и число К. Если все элементы массива меньше К, то вывести true; в противном случае вывести false.
  94. Дан целочисленный массив и число К. Если все элементы массива больше К, то вывести true; в противном случае вывести false.
  95. Дан целочисленный массив и число К. Вывести количество элементов, меньших К.
  96. Дан целочисленный массив и число К. Вывести индекс первого элемента, большего К.
  97. Дан целочисленный массив и число К. Вывести индекс последнего элемента, меньшего К.
  98. Дан целочисленный массив. Вывести индексы элементов, которые меньше своего левого соседа, и количество таких чисел.
  99. Дан целочисленный массив. Вывести индексы элементов, которые меньше своего правого соседа, и количество таких чисел.
  100. Дан целочисленный массив. Вывести индексы элементов, которые больше своего правого соседа, и количество таких чисел.
  101. Дан целочисленный массив. Вывести индексы элементов, которые больше своего левого соседа, и количество таких чисел.
  102. Дан целочисленный массив. Проверить, образует ли он возрастающую последовательность.
  103. Дан целочисленный массив. Проверить, образует ли он убывающую последовательность.
  104. Дан целочисленный массив. Проверить, образует ли он упорядоченную последовательность.
  105. Дан целочисленный массив. Если данный массив образует убывающую последовательность, то вывести nil, в противном случае вывести номер первого числа, нарушающего закономерность.
  106. Дан целочисленный массив, содержащий по крайней мере два нуля. Вывести сумму чисел из данного массива, расположенных между первыми двумя нулями.
  107. Дан целочисленный массив, содержащий по крайней мере два нуля. Вывести сумму чисел из данного массива, расположенных между последними двумя нулями.
  108. Дан целочисленный массив и целое число К. Возвести в степень К все элементы массива.
  109. Дан целочисленный массив. Найти минимальный и максимальный элемент в массиве.
  110. Дан целочисленный массив. Поменять местами минимальный и максимальный элементы массива.
  111. Дан целочисленный массив. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами.

Дан целочисленный массив. Необходимо вывести вначале его элементы с четными индексами, а затем - с нечетными.

[править]

Решение:

a = [1, 2, 4, 5, 2, 1, 6, 11]
a.select.with_index { |_, index| index.even? } + a.select.with_index { |_, index| index.odd? }
#  => [1, 4, 2, 6, 2, 5, 1, 11]

Или так:

a = [1, 2, 4, 5, 2, 1, 6, 11]
(a.partition.with_index { |_, index| index.even?}).flatten
#  => [1, 4, 2, 6, 2, 5, 1, 11]

Дан целочисленный массив. Необходимо вывести вначале его элементы с нечетными индексами, а затем - четными.

[править]

Решение:

a = [1, 2, 4, 5, 2, 1, 6, 11]
a.select.with_index { |_, index| index.odd? } + a.select.with_index { |_, index| index.even? }
#  => [2, 5, 1, 11, 1, 4, 2, 6]

Дан целочисленный массив. Вывести номер первого из тех его элементов, которые удовлетворяют двойному неравенству: A[0] < A[i] < A[-1]. Если таких элементов нет, то вывести [ ].

[править]

Решение:

a = [1, 5, 2, 3, 4]
a.index(a.select { |num| a[0] < num && num < a[-1] }.first) || []
# => 2

А можно и так:

a = [1, 7, 4, 5, 2, 1, 6, 4]
a.index { |i| a[0] < i && i < a[-1] } || []
# => 4

Задачи Малого ЦКТ ГОУ МГИУ (подготовительные курсы) http://sctc.msiu.ru

[править]
Информация

Эти задачи выдавались в качестве домашнего задания слушателям курсов Малого ЦКТ в 2006-2007 учебном году.

  • Написать программу вычисления суммы цифр, введенного с клавиатуры натурального числа.
  • Ввести натуральное число и напечатать его минимальную цифру. Например, для 1234076 ответом будет 0, а для 77777 - 7.
  • Ввести натуральное число и напечатать количество вхождений его максимальной цифры в число.Так для числа 77777 ответ будет 5, а для 12321 - ответ равен 1.
  • Число 2005 можно представить в виде суммы последовательных натуральных чисел несколькими способами, например, 2005 = 1002+1003 = 399+400+401+402+403. Найдите количество подобных разложений для введенного с клавиатуры числа.
  • Найти такое десятизначное число, что все его цифры различны, причем число, составленное из первых двух его цифр, делится на 2, из первых трех цифр - на 3, из четырех - на 4, и так далее, а само число делится на 10.
  • Какое наибольшее количество цифр может быть в числе, если любое его "начало" делится на количество цифр этого начала?
  • Напишите программу, которая для заданного натурального числа n определяет количество вхождений числа 3 в разложение заданного числа на простые сомножители.
  • Найдите количество максимальных элементов в массиве.
  • В массиве содержится n действительных чисел. Известно, что среди них имеется хотя бы одно отрицательное. Найдите величину наибольшего среди всех отрицательных чисел.
  • Дан текст. Найдите наибольшее количество идущих подряд цифр в нем.
  • Дан текст. Определите максимальное из имеющихся в нем чисел.
  • Даны две строки. Определите, сколько начальных символов первой строки совпадает с начальными символами второй. Рассмотрите два случая: а) известно, что строки разные; б) строки могут совпась.
  • Расширьте класс Time методом, определяющим количество дней, оставшихся до Нового года.
  • Положительное целое число d называется наибольшим общим делителем (НОД)целых чисел a и b, если: а) d делит a и d делит b, б) для любого другого делителя этих чисел с (c != d), d делит c. Известно, что НОД(x, 0) = НОД(0, x) = x и НОД(x, y) = НОД(y, x%y), где x%y есть остаток от деления x на y. Расширьте класс Integer методом gcd (greatest common divisor), вычисляющим НОД двух целых чисел.
  • В одном массиве записано количество мячей, забитых футбольной командой в каждой из 20 игр, в другом - количество пропущенных мячей в этой же игре. Для каждой игры определите словесный результат игры (выигрыш, проигрыш или ничью).
  • В одном массиве записан рост некоторых студентов, а в другом (с тем же числом элементов) - их фамилии в том же порядке, в котором указан рост. Известно, что все студенты разного роста. Напечатайте фамилию самого высокого студента.
  • Напишите функцию simplify(num), предназначенную для вынесения сомножителей заданного натурального числа num из под знака квадратного корня. Функция должна возвращать массив из двух натуральных чисел [a, b], таких, что N = a**2*b и не существует натуральных c > a и d,

при которых N = c**2*d. Примеры:

simplify(37) = [1, 37]
simplify(16) = [4, 1]
simplify(96) = [4, 6]
  • Напишите функцию text_simplify(num), которая выводит результат работы предыдущей функции в виде строки текста. Примеры:
text_simplify(16) = "4"
text_simplify(96) = "4 корня квадратных из 6"
text_simplify(37) = "корень квадратный из 37"
text_simplify(50) = "5 корней квадратных из 2"