Добавить в корзинуПозвонить
Найти в Дзене
Nuances of programming

Слабо решить эти задачи по программированию?

Источник: Nuances of Programming Программирование всегда связано с решением различных задач. Я подготовил список из шести различных заданий и отсортировал их по сложности решения. Первая — самая простая, шестая — самая сложная. Сможете разобраться со всеми? В конце статьи я также разместил решения, выполненные на языке PHP. Вы же можете выбрать для этого другой язык. 1. Плюс минус Давайте начнем с относительно простой задачи, взятой с HackerRank. Ее можно назвать разминочной. Дан массив целых чисел. Вычислите дроби его элементов, являющихся положительными, отрицательными и нулевыми. Выведите на печать десятичное значение каждой дроби в новой строке. Имейте в виду, что это задача с высокой степенью точности. Примеры масштабированы до шести знаков после точки, поэтому диапазон допустимых ошибок составляет до 10^-4 . Например, дан массив arr=[1, 1, 0.-1, -1]. В нем пять элементов, два из которых положительные, два отрицательные и 1 равен нулю. Их отношения будут следующими 2/5 = 0.400000
Оглавление

Источник: Nuances of Programming

Программирование всегда связано с решением различных задач. Я подготовил список из шести различных заданий и отсортировал их по сложности решения. Первая — самая простая, шестая — самая сложная. Сможете разобраться со всеми?

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

1. Плюс минус

Давайте начнем с относительно простой задачи, взятой с HackerRank. Ее можно назвать разминочной.

-2

Дан массив целых чисел. Вычислите дроби его элементов, являющихся положительными, отрицательными и нулевыми. Выведите на печать десятичное значение каждой дроби в новой строке. Имейте в виду, что это задача с высокой степенью точности. Примеры масштабированы до шести знаков после точки, поэтому диапазон допустимых ошибок составляет до 10^-4 . Например, дан массив arr=[1, 1, 0.-1, -1]. В нем пять элементов, два из которых положительные, два отрицательные и 1 равен нулю. Их отношения будут следующими 2/5 = 0.400000, 2/5 = 0.400000 и 1/5 = 0.200000. На печати они должны выглядеть так: см. скриншот.

2. Сумма двух

Эта задача, взятая с LeetCode, считается простой.

-3

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

3. Самое большое палиндромное произведение

Это еще одна простая задача, которую я взял с Project Euler. На данный момент она уже решена более чем 455 000 людьми:

-4

Палиндромное число читается одинаково в обе стороны. Самое большое палиндромное произведение, полученное из двух двухзначных чисел — это 9009=91*99. Найдите самый большой палиндром, который можно получить из произведения двух трехзначных чисел.

4. Различные значения

Следующая задача взята с Project Euler. Она уже несколько сложнее предыдущей и решена только 100 000 пользователями.

-5

Рассмотрите все целочисленные комбинации a^b при условии, что 2 ≤ a ≤ 5 и 2 ≤ b ≤ 5. Если затем их расположить по порядку, удалив все повторения, то мы получим следующую последовательность из 15 различных значений. Сколько таких различных значений содержится в последовательности, полученной согласно условию 2 ≤ a ≤ 100 и 2 ≤ b ≤ 100?

5. Постоянная Капрекара

Поздравляю тех, кто дошел до этого этапа! Настало время приступить к по-настоящему серьезной задаче, которая была предоставлена Coderbyte.

-6

Пусть функция KaprekarsConstant(num) получает для передачи параметр num — четырехзначное число с как минимум двумя различными цифрами. Программа должна производить с этим числом следующие действия: упорядочивать его цифры по возрастанию и убыванию (добавляя нули для получения четырехзначного числа), а затем вычитать меньшее число из большего. Далее она должна повторять предыдущий шаг. Выполнение этого процесса всегда в итоге будет приводить вас к результату 6174 (7641–1467=6174). Программа также должна возвращать количество повторов, потребовавшихся для достижения этого значения. Например, если num равен 3524, программа должна вернуть 3, вот её три шага: 

(1) 5432–2345 = 3087
(2) 8730–0387 = 8352
(3) 8532–2358 = 6174

6. Поменять местами узлы в парах

Это труднейшая задача, которая была предоставлена LeetCode. Хоть она и считается средней по сложности, для меня она оказалась гораздо труднее постоянной Капрекара. Для ее решения вам потребуется знать принцип работы связанных списков.

Давайте не будем слишком углубляться в детали и взглянем на саму задачу:

Дан связанный список. Поменяйте местами смежные узлы и верните их головной элемент. Изменять можно только узлы, но не их значения.

Решения

1. Плюс минус

Решение здесь очень простое:

-7

2. Сумма двух

Хоть эта задача и является несколько сложнее, у вас вряд ли возникнут трудности с ее решением. Я использовал простой подход брутфорс.

-8

3. Самое большое палиндромное произведение

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

Я также добавил стоп-условия, чтобы избежать лишних повторений.

-9

4. Различные значения

Эту задачу я решил снова путем брутфорса.

Добавьте каждый результат в массив, а затем удалите из него повторы. Последним шагом станет сортировка массива.

-10

5. Постоянная Капрекара

Эта задача уже несколько сложнее. Она первая в списке, требующая для своего решения рекурсию.

-11

-12

Скриншот прохождения всех тестовых кейсов.

6. Поменять местами узлы в парах

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

-13

-14

Читайте также:

Читайте нас в телеграмме и vk

Перевод статьи Daan: Do You Know How to Solve These Programming Problems?