Продолжаем публиковать интересные задачи и вопросы с собеседований в различные IT-компании мира.
На этот раз в подборку попали вопросы для будущих инженеров-программистов в Symantec. В преддверии майский праздников, задачи выбраны не самые сложные, но требующие некоторого размышления. Просим также писать в комментариях интересные вопросы и задачи, которые встречались Вам на собеседованиях.
Ответы будут даны в течение следующей недели — успейте решить. Удачи!
На этот раз в подборку попали вопросы для будущих инженеров-программистов в Symantec. В преддверии майский праздников, задачи выбраны не самые сложные, но требующие некоторого размышления. Просим также писать в комментариях интересные вопросы и задачи, которые встречались Вам на собеседованиях.
Вопросы
- Counterfeit сoins
A box contains n coins, of which 7 of them are counterfeit with tails on both sides and the rest are fair coins. If one coin is selected from the bag and tossed, the probability of getting a tail is 17/20. Find the value of ‘n’.
ПереводВ коробке n монет, 7 из которых поддельные — с решкой на обеих сторонах, а остальные монеты — правильные. Если выбрать и подбросить монету из коробки — шанс выпадения решки 17/20. Найдите n.
- The largest unavailable number
At McDonald’s you can order Chicken McNuggets in boxes of 6,9, and 20. What is the largest number of nuggets that you cannot order using any combination of the above?
ПереводВ Макдональдс Вы можете заказать куриные наггетсы в коробке на 6, 9 и 20 шт. Каким является максимальное число наггетсов, которое нельзя заказать любыми комбинациями этих коробок,
Прим. Нет, рекламу нам не оплачивали :)
Задачи
- Find all combinations
Given a set of characters and a positive integer k, print all possible strings of length from 1 to k that can be formed from the given set.
Examples:
Input:
set[] = {'a', 'b'}, k = 3
Output:
a
b
aa
ab
ba
bb
aaa
aab
aba
abb
baa
bab
bba
bbb
Input:
set[] = {'a', 'b', 'c', 'd'}, k = 1
Output:
a
b
c
d
ПереводДан набор символов и положительное число k. Выведите все возможные строковые комбинации длиной от 1 до k, которые можно получить из этого набора.
Примеры:
Вход:
set[] = {'a', 'b'}, k = 3
Выход:
a
b
aa
ab
ba
bb
aaa
aab
aba
abb
baa
bab
bba
bbb
Вход:
set[] = {'a', 'b', 'c', 'd'}, k = 1
Выход:
a
b
c
d
- Delete a node in a single-linked list
Given a pointer to a node to be deleted in a singly linked list, delete the node. Note that we don’t have pointer to head node. Write a program to accomplish the task, pseudocode is accepted.
ПереводДан указатель на элемент односвязного списка, необходимо удалить этот элемент. Обратите внимание, что указатель на головной элемент не даётся. Напишите программу, выполняющую поставленную задачу, псевдокод приемлем.
- Comment remover
Write a program to remove comments from given C/C++ code.
ПереводНапишите программу, удаляющую комментарии из С/C++ кода.
Ответы будут даны в течение следующей недели — успейте решить. Удачи!
qw1
Понятно, что если мы найдём 6 подряд идущих чисел, которые можно заказать: N0=N, N1=N+1, N2=N+2,..., N5=N+5, то любое следующее за ними M можно представить как M=Ni+6*k. То есть добавив к заказу Ni k коробок по 6, получим заказ M.
Также понятно, что начиная с 6, можно заказать любое число, кратное трём (N=6x+9y=3(2x+3y), можно найти x,y чтобы получить любое число 2x+3y>1)
Дальше я нарисовал таблицу 9x9, аналогичную таблице умножения, и расположил в ней числа от 0 до 99. Буду зачёркивать числа, которые можно заказать. Сразу зачеркнул все числа, кратные 3 и число 0. Делаем что-то типа решета Эратосфена. Идём подряд по всем зачёркнутым, начиная от 0, и зачёркиваем все числа, через 6, 9 и 20, начиная от зачёркнутого. В итоге у меня появился зачёркнутый ряд из 6 чисел 44-49, и незачёркнутое число 43 перед ним, что и является ответом.
qw1
Таблицу 10x10*
Deosis
Тогда, начиная с 26, можно заказать число, равное 0 или 2 по модулю 3.
С 46 можно заказать любое число.
Поэтому 43 — наибольшее число.
ПС. Попробуйте решить задачу для чисел 165, 210, 231, 315.
qw1
Чертовски сильная мысль, никогда бы не подумал в таком ключе, что 20 mod 3 = 1, поэтому, добавляя 20, можно сдвигать остатки от деления на 3 на единицу.
165 = 3·5·11
210 = 2·3·5·7
231 = 3·7·11
315 = 3·3·5·7
Комбинируя только числа 165 и 231, я могу получить
N = 165·x+231·y = 33·(5x+7y), т.е., начиная с 33·24 можно получить все числа, кратные 33.
Если бы вместо 33 было 11 (т.к. 210 mod 11 = 1), то, добавляя 210·z можно получить любое число, начиная с 23·24+11·210. Но увы, 210 mod 33 = 12, добавляя 12, я не получу все остатки от деления на 33 (33 — не простое число).
Как тут поможет ещё одно не использованное число 315, у меня нет идей.
qw1
blindmen
а разве правильный ответ не «все имеющиеся нагетсы + 1 любая коробка»?
qw1
Неправильный ответ, т.к. надо выбрать наибольшее, а решение «все имеющиеся нагетсы + 2 любых коробки» заведомо больше вашего )))
qw1
Задача на удаление ноды простая, но не всегда имеет решение.
В случае, когда список состоит из 1 ноды, её удаление должно обнулить указатель Head, а его, по условями задачи, у нас нет.
Andy_U
Вопрос N1 — 10.
Без комментариев…
Вопрос N2 — 43:
44 = 1*20+4*6
45 = 5*9
46 = 2*20+1*6
47 = 1*20+3*9
48 = 8*6
49 = 2*20+1*9
Дальше — по кругу с шагом 6:
50=44+6
51=45+6
…
Задача N2:
Если все элементы списка имеют один и тот же размер, копируются (и удаляются), то копируем следующий за удаляемым элементом на его место и правим в нем ссылку. Потом исходную копию сдвинутого элемента удаляем. А вот если удаляемый элемент маленький, а следующий большой?
speciman
Правим ссылку?
Это нужно ?
Andy_U
О! Нет, конечно. Спасибо за уточнение.
mickvav
Но вылезание задачи про односвязный список в продакшене вызовет серьезные вопросы к архитектуре…
Andy_U
Задача N 3:
Koneru
Ну что проверит 3 задача…
RiaD
string path = "//path";
Koneru
Ваша правда, ну буду модифицировать регулярку(уже дело принципа)).
qw1
да там ещё и другие проблемы:
после замены останется:1) жадная звёздочка
\/\/.*\n
скушает всё от первого коммента // до конца файла.2) жадная звёздочка
\/\*.*\*\/
скушает всё между первым и последним комментом:int
3) Нужно учесть смешивание стилей комментирования:
Ваш regex зачистит всё.
qw1
Ну и, такая замена
fileContent.replace(/\/\/.*?\n/g,"");
из
сделает некорректный код
Koneru
Кармы не хватает, но +
IIvana
Вопрос 1 — n=10. Решал по-честному, с уравнением (14+k)/(14+2k) = 17/20
Задача 1 как всегда решается в одну строчку на неземном и волшебном
naething
Про наггетсы было на Numberphile: www.youtube.com/watch?v=vNTSugyS038
SkyL1ne
Наггетсы: что не так с числом 37?
Andy_U
Все так, его тоже нельзя «набрать» указанными числами, но оно не максимальное. 43 больше.
johnklymenko
Нужно наибольшее число.