Проводится небольшое соревнование по Delphi. Подробности
здесь
Задание №1
Макс. балл: 10
Найти максимальный и минимальный элементы среди тех элементов массива, которые встречаются более одного раза. В случае, когда в массиве нет ни одного повторяющегося элемента возбудить исключение.
Результат оформить в виде процедуры:
procedure MinAndMax(const Data: array of Integer; var Min, Max: Integer);
Пример: Для массива [1, 6, 6, 1, 6, 7, 10, 0, 7] правильным результатом будет 1 и 7
Задание №2
Макс. балл: 15
Найти среднее арифметическое всех чисел в массиве, которые встречаются в нем от 3 до 5 раз.
Результат оформить в виде функции
function Middle(const Data: array of Integer): Extended;
Пример: Для массива [1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4] правильным ответом будет 1.625 = (1+1+1+2+2+2+2+2)/8.
Задание №3
Макс. балл: 15
Найти все комбинаций целых чисел в промежутке от 1 до N, которые удовлетворяют условию a2+b2=c2. Число c может состоять только из чисел, которые содержатся в a или b. Результат оформить в виде функции:
type TSolutionCallback = procedure(A, B, C: Integer);
procedure Find(N: Integer; SolutionCallback: TSolutionCallback);
Пример: 152+202=252
Задание №4
Макс. балл: 10
Имеется последовательность цифр, образованная последовательно записанными натуральными числами 123456789101112131415161718192021... Необходимо получить N-ю цифру из заданной последовательности (N>=1)
Суть задания состоит в том, чтобы самому эффективно получать заданную последовательность чисел (а не пользоваться заданной).
Результат оформить в виде функции:
function Func(N: Integer): Integer;
Пример:
Func(3) = 3
Func(11) = 0
Func(17) = 3
Задание №5
Макс. балл: 15
Пусть задано некоторое слово. Необходимо вывести набор всевозможных различных слов (возможно бессмысленных) полученных всевозможными перестановками букв исходного слова.
Результат оформить в виде процедуры:
type TSolutionCallback = procedure(const Value: string);
procedure Words(const Word: string; SolutionCallback: TSolutionCallback);
Пример: для слова "ФАРА" в набор входят "АРФА", "ФААР" и т. д.
Задание №6
Макс. балл: 15
Число, состоящее из n цифр, называется числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому этому числу. Необходимо найти все n- значные числа Армстронга (1 < n < 10).
Результат оформить в виде процедуры:
type TSolutionCallback = procedure(Value: Integer);
procedure Armstrong(const N: Integer; SolutionCallback: TSolutionCallback);
Пример: 153 является числом Армстронга, (153 = 13 + 53 + 33)
Задание №7
Макс. балл: 25
Дана шахматная доска размером M x N. Необходимо ходом коня побывать на каждом поле (i,j) доски (i=1..M, j=1..N) и вернуться в исходное поле. Для определенности считаем, что обход доски начинается с клетки (1,1).
Результат оформить в виде процедуры:
type TSolutionCallback = procedure(I,J: Integer);
procedure Knignt1(const M, N: Integer; SolutionCallback: TSolutionCallback);
Замечание: вызов функции SolutionCallback для поля (1,1) обязателен. Если найдено несколько маршрутов, то просто по окончании вызовов SolutionCallback для первого маршрута, просто вызвать SolutionCallback(1,1) и начать выдавать клетки второго маршрута, и т. д.
Задание №8
Макс. балл: 25
Дано: N сосудов, каждый из которых имеет вместимость V[i] литров и заполнен на U[i] литров (U[i] <= V[i]). Необходимо установить, можно ли "отмерить" заданный объем V0, и если да, то за какое наименьшее число ходов. Объем V0 можно отмерить, если в результате операций
1. Переливания воды из сосуда в сосуд.
2. Выливания воды из сосуда
в одном из сосудов оказалось ровно V0 литров воды.
Результат оформить в виде функции:
function MoveCount(N: Integer; V0: Extended; const V, U: array of Extended): Integer;
Примечание: если объем V0 отмерить нельзя, функция должна вернуть -1.
Пример: пусть N=3, V[0] = 3, V[1] = 5, V[2] = 10, U[0] = 0, U[1] = 0, U[2] = 10. Тогда
1. Переливаем воду из 2 в 1, U[0] = 0, U[1] = 5, U[2] = 5
2. Переливаем воду из 1 в 0, U[0] = 3, U[1] = 2, U[2] = 5
3. Выливаем воду из 0, U[0] = 0, U[1] = 2, U[2] = 5
4. Переливаем воду из 1 в 0, U[0] = 2, U[1] = 0, U[2] = 5
5. Переливаем воду из 3 в 0, U[0] = 3, U[1] = 0, U[2] = 4
Таким образом, объем V0=4 можно отмерить за пять ходов.
Задание №9
Макс. балл: 15
Нахождение последовательностей в списке случайных чисел, числа могут повторятся. Количество чисел так же случайное.
На входе: строка с числами, разделенными запятой. Числа [0..MaxInt].
Ожидается: строка со списоком последовательностей упорядоченый по возрастанию + список одиночных чисел также упорядоченых по возрастанию.
Результат оформить в виде функции:
function GetConsecutiveString(const Data: array of Integer): string;
Пример:
Вход: '13,9,2,3,4,14,15,1,5,17,12,20'
Результат: '(1..5),(12..15),(9,17,20)'
Да и еще пожалуйста пишите свои решения нам на почту чтобы не открывать их для остальных участников.. Если можно, прошу модератора удалить сообщение. Пусть остальные думают сами!