--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

Задачки для программеров ))

34
60
С друзьями на NN.RU
В социальных сетях
Поделиться
Psycho
17.01.2006
Интересные задачки для программистов
1. Даны 2 буфера фиксированной длины. В начале каждого лежат данные (строчки текст), дальне до конца нули. Поменять строчки местами и перевернуть их задом на перед, так, чтобы в итоге нули опять находились в конце, а текст - в начале. (Microsoft)

2a. Два игрока играют по очереди называют число, достоинство воображаемой разменной монеты. При этом нужно, чтобы это число нельзя было выплатить при помощи ранее называнных монет. Проигрывает назвавший число 1. Доказать, что игра не может продолжаться бесконечно. (J.H.Conway)
2b. Если у нас уже есть монеты достоинствами x[0]...x[n] (каждого типа - неограниченнок количество), то можно задать вопрос: как нам выплатить данную сумму денег S минимальным общим числом монет? Напишите соответвующую программу.

3. Может ли цепная реакция в gridgame продолжаться бесконечно?
(Mark James)

4. Что делает следующий С++ код? (Matt Marcus)

struct A {
A(const volatile void*);
};

char f(A);
int f(...);

template
struct Test {
static const int value = (sizeof(f(*(T*)0)) == sizeof(char));
};


5а. Вы сидите в лодке, плавающей посреди небольшого озера. У Вас собой на борту есть большой кирпич. Если выкинуть его в озеро, уровень воды увеличится? уменьшится? останется неизменным? (популярный вопрос, на многих фирмах задают, в том числе на и Микрософте)
5b. Кусок замороженного спирта в бочке с пивом. Что станет с уровнем жидкости, когда спирт весь растает? (не понмню откуда)

6. Вы отправились в прошлое на машине времени и повстречали, ну скажем, Михайло Ломоносова (варианты: А.С. Пушкина, Томаса Эдисона, Николу Теслу итп). Объясните ему, что такое "Интернет" (мое, по Микрософтовской идее). (Садистский вариант: объясните ему, что такое General Protection Failure :))

7. У вас есть 8 с виду одинаковых монет, одна из которых, тем не менее, фальшивая. Фальшивая монета чуть тяжелее, но во всем остальном идентична настоящим. У вас также есть, в лучших традициях жанра, весы с чашечками, как у богини правосудия. За какое минимальное число взвешиваний можно определить фальшивку? (популярная задача)

8. Придумайте структуру данных, которую бы мог на выходе создать парсер MAKE-файлов. Напишите (на псевдокоде) интерпретатор/исполнитель для этой структуры (Microsoft)

9. Протестируйте Save Dialog в Notepad'e (задача для микософтовских тестеров)

10. Есть три урны из тех, что содержат шары в задачках по теории вероятности. На первой написано "ЧЕРНЫЕ", на второй - "БЕЛЫЕ", на третьей - "ЧЕРНЫЕ И БЕЛЫЕ". В одной лежат белые шары, в другой - черные, в оставшейся - и черные и белые. Все надписи заведомо ложны. Разрешается достать один шар из только одной урны. Как определить в какой урне что лежит? (Microsoft)

11. Дано много картинок в формате RGB (т.е. цвет каждого пикселя представлен тремя числами: количеством красного цвета, зеленого цвета и синего цвета). Перевести картинки в 256-цветовой формат (а-ля Gif) с использованием заданной палитры (палитра одна на все картинки). Т.е. вместо каждого цвета подставить индекс ближайшего к нему цвета в палитре. Разумеется, хорошо бы это сделать как можно более эффективно. (Google)

12. Обойти двоичное дерево, НЕ используя рекурсию. (Michael Abrash)

13. На консоли Xbox адрес пикселя с координатами x, y записывается в двоичной форме как x7 y7 x6 y6 x5 y5 x5 y5 x4 y4 x3 y3 x2 y2 x1 y1 x0 y0 (где xn, yn - соответствующие биты чисел x и y). Дан пиксель с адресом a, найти адрес его соседа справа (Visual Concepts)

14. Дана строчка текста, переставить в ней все слова в противоположном порядке, так чтобы, например, строчка "Здесь был Вася" превратилась в "Вася был Здесь". Дополнительную память выделять не разрешается (популярная задача)

15. Дано число. Определить, является ли оно целой степенью 2. (Microsoft и другие)

16а. Дан связный список. Проверить, нет ли в нем циклов. (популярная)
16b. Сделать то же самое с двоичным деревом.

17. В вершинах равностороннего треугольника со стороной 200 метров сидит по собаке. По команде "старт!" каждая из них начинает гнаться за своей соседкой слева со скоростью 200 метров в минуту. Каждая собака бежит точно в направлении текущего положения своей (тоже, разумеется, бегущей) цели. Поэтому их траектории представляют некие сходящиеся спирали. Через какое время все собаки сойдутся, (вернее, сбегутся) в центре? (вариант популярной задачи)

18. Даны две строчки битов, длинная и короткая. Определить, как можно более эффективно, содержится ли короткая строчка в длинной (мое)

19. Почему пивные банки скошены сверху и снизу? (Microsoft)

20. Как провести электричество, чтобы свет на лестнице можно было включать/выключать и с верхней площадки, и с нижней. Нарисуйте схему проводки.

21. Даны указатели на два элемента в двоичном дереве, найти их общего родителя (Microsoft)

22. Стандартный способ "честного" деления пирога: первый участник делит, второй выбирает себе один из кусков, оставшийся кусок достается первому. Что делать если участников 3? (Мартин Гарднер, чтоли?)

23. Есть круглый бассейн. От его бортика в направлении точно на север отплыла рыба. Проплыв 6 метров, она опять столкнулась с бортиком. Тогда рыба повернула на восток, проплыла еще 8 метров и опять столкнулась с бортиком. Найти диаметр бассейна. (опять Мартин Гарднер)

24. Дано число int x. Как наиболее эффективно подсчитать количество единичных битов в нем, если нельзя пользоваться дополнительной памятью. Соответствующей командой ассемблера тоже пользоваться нельзя. (впервые видел в Dr.Dobbs Journal)

25. У вас есть зажигалка и веревка. Если веревку поджечь с конца, то она вся сгорит за полчаса. Как отмерить, при помощи этих двух предметов 15 минут? Важное обстоятельство: Веревка горит неравномерно, где-то быстрее, где-то медленнее. (очень популярная задача)

26. Есть программа, которая рисует на экране шар (скажем, с картой Земли на поверхности). Хочется, чтобы можно было при помощи мыши управлять ориентацией шара, дабы рассмотреть его со всех сторон. Придумайте соответствующий пользовательский интерфейс. Напишите (на псевдокоде) основной алгоритм управления ориентацией. (мое)

27. Вы стоите посреди замерзшего озера на идеально скользком льду. Трения нет вообще. Придумайте как можно больше способов добраться до берега. (Physics Mountain)

28.a (Для мэнеджеров, наверное) Вы - добрый эльф, меткий стрелок из лука. За Вами гонится отряд из 10 орков, злах и эгоистичных тварей. К счастью, они пока далеко позади. К несчастью, через какое-то время они Вас догонят и съедят. К счастью у Вас есть стрелы, которыми Вы можете разить орков наповал. К еще большему счастью, на одного орка хватает одной стрелы и бьете Вы без промаха. К несчастью, у Вас имеется только 5 стрел. К еще большему несчастью, орки об этом знают. Как Вам спастись? (D.Friedman)
Update28.b Какие у орков могут быть контр-приемы?

29. В какие времена суток положение всех трех стрелок часов (часовой, минутной и секундной) совпадает? (не помню откуда)Разъяснение Часы механические, и стрелки двигаются с равномерной скоростью.

30. Почему в стандарте С++ не позволено по умолчанию преобразовывать char** в const char**? Напишите пример кода, где такое преобразование (если бы его разрешили) привело бы к ошибке. (С++ faq)

31. У Вас с другом есть прямоугольный торт, из которого какой-то гад, к сожалению, уже вырезал (и съел) прямоугольный кусок. Ориентация и положение вырезанного куска могут быть совершенно произвольными. Как вам с другом разделить оставшийся торт на две равные части? (Microsoft)

32. Как передвинуть гору Фудзи? (Microsoft)
С этим лучше сюда: http://www.nn.ru/biz/forum/software/
VIadimir
17.01.2006
Гору Фудзи нельзя передвинуть, но зато можно передвинуть всё остальное (вокруг горы) :)

*** передвигать гору наподобие ханойской башни не рекомендуется...
.
Интересно, если капнуть совочком с одной стороны и перенести землю на другую сторону, Будет ли считаться гора передвинутой?
nnstepan
17.01.2006
Я к сожалению или к счастью не программист. Но
25. Надо быстро поджечь веревку с двух концов.
nnstepan
17.01.2006
20. см вложение, там два варианта.
Верхний вариант - К1, К2 - кнопки включение, выключения. Работает на основе триггера.
Нижний вариант - К - реле с контактами К1 и К2. В1 и В2 кнопки включения, О1 и О2 кнопки выключения.
nnstepan
17.01.2006
10. Подходим к урне, где написано ЧиБ и достаем шар. Если он Б (т.е. там лежат Б), то там где написано Б находится Ч, а там где написано Ч находятся ЧиБ. Все это так как все надписи заведомо ложные.
Подходим к урне, где написано ЧиБ и достаем шар. Если он Ч (т.е. там лежат Ч), то там где написано Ч находится Б, а там где написано Б находятся ЧиБ. Все это так как все надписи заведомо ложные.
Третьего варианта быть не может опять же по причине - все надписи заведомо ложные.
nnstepan
17.01.2006
7. Наверно за 3 взвешивания. По 4 монеты на чашку, потом по две на чашку и по одной.
Psycho
17.01.2006
7. можно за два взвешивания 2+2, если в первых чертырех ее не оказывается то выходит так же за три
A_n_t
17.01.2006
За 2 по любому.
1-е взвешивание - на каждую чашку кладется группа из трех монет, 2 остаются
1а) вес равный -> 2-е взвешивание выявляет болееяжелую из 2 оставшихся монет.
1б) одна из групп потри монеты тяжелее -> при 2-ом взвешивание на каждую чашку весов кладется по одной монете из более тяжелой группы
Psycho
17.01.2006
Круто ) сам не додумался )
3+3
Если ни в какой тройке не осталось, то взвешиваем оставшиеся две.
если в одной из троек, то взвешиваем две из нее.
nnstepan
17.01.2006
Стопудово можно за два )))
Делишь на три группы - 3, 3, 2.
Взвешиваешь две группы 3 и 3,
если равновесие, то вешаешь по одной из третье группы, где 2 и роезультат ясен.
Если перевесила скажем первая группа, то одна монета из нее откладывается, а взвешиваются две оставшиеся монеты. Если равновесие, то результат - та, которую отложили, или та которая перевесила, если неравновесие!
nnstepan
17.01.2006
Приминимо, даже если монет не 8, а 9!!! ))) тогда три группы по три....
Yupi
17.01.2006
7. в любом случае за 2 взвешивания.

тьфунах... только время появилось ответить, а уже все расписали.
Desktop
17.01.2006
nnstepan
17.01.2006
31. Все-таки я считаю, что этот гад режет кусок с краю и не может вырезать его из центра. Тогда мы просто отрезаем торт до конца по одной из существовавших линий отреза и получаем два прямоугольника, которые свободно делим пополам.
nnstepan
17.01.2006
27.
1. Дуть ртом
2. Пукнуть )))
3. Взять что-нибудь из кармана и кинуть
4. Вдохнуть ртом + Пукнуть )))
Почти прямоток :))
Desktop
17.01.2006
"Плыть", т.е. грести руками, т.к есть атмосфера.
nnstepan
17.01.2006
22. Первый отрезает одну треть от целого, передает нож второму, тот делит оставшийся кусок на две части, а третий принимает решение кому какой кусок достанется )))
Первый режет на три части и берет последним?
nnstepan
17.01.2006
5a. Уровень воды должен понизиться. Так как находясь в лодке, кирпич вытесняет воды ровно на свою массу, а когда он выброшен и лежит на дне, то вытесняет воды ровно на свой объем, а так как плотность кирпича больше плотности воды, то общий объем вытесненной воды уменьшится, соответственно уровень в озере понизится.
Archimed
17.01.2006
А если кирпич из пенопласта :-)
nnstepan
17.01.2006
тогда уровень воды не изменится!
Универсально.
Shooter
19.01.2006
nnstepan писал(а)
31. Все-таки я считаю, что этот гад режет кусок с краю и не может вырезать его из центра.


1. Я берусь разделить торт точно поровну ОДНИМ разрезом без ограничения на местоположение дыры.
2. Я выполню п.1 двумя способами.
3. Я выполню пп.1,2 в случае, если формы торта и дыры любые четырехугольники с параллельными противоположными сторонами.
nnstepan
19.01.2006
Блин, заинтриговал, давай колись, научи неучей )))
Я только предположил, что можно разделить, разрезав горизонтально, т.е. паралелльно поверхности, на которой он лежит. Но в таком случае не важно какой формы торт и вырез )))))))))))
Shooter
20.01.2006
Правильно. Разрезать параллельно горизонтальной поверхности - это тривиальное решение, которое я подразумевал в п.2 под вторым способом. Но это не интересное решение, хотя и зачотное на интервью. Но в любом случае торт надо суметь разрезать ОДНИМ разрезом стандартным образом (он может быть покрыт сверху шоколадной глазурью).

У меня наводящий вопрос: сколько существует способов разрезать прямоугольник (квадрат, параллелограм, ромб) одним разрезом на две равные части?
nnstepan
20.01.2006
Shooter писал(а)
У меня наводящий вопрос: сколько существует способов разрезать прямоугольник (квадрат, параллелограм, ромб) одним разрезом на две равные части?

Точный ответ на этот вопрос не знаю.
1. Резать на два треугольника, т.е. по линии проходящей через противоположные углы.
2. Паралельно двум противоположным сторонам четко посередине.
А мне кажется, что любой разрез, проходящий через центр прямоугольника, делит его ровно пополам.


Таким образом, линия, проходящая через центр торта и через центр дыры, поделит пополам и торт с дырой
Shooter
20.01.2006
5+
Shooter
20.01.2006
nnstepan писал(а)
Я к сожалению или к счастью не программист.

Вы просто об этом не знаете. Я Вам настоятельно рекомендую подумать о карьере отличной от админской.
nnstepan
20.01.2006
Shooter писал(а)
Я Вам настоятельно рекомендую подумать о карьере отличной от админской.

А о какой подумать? О программерской?
Shooter
20.01.2006
Не обязательно. Но сисадмином Вам точно недолго работать.
nnstepan
20.01.2006
Почему? Можно подробнее?

Лучше наверно в приват, так как от темы немного ушли ;)))
M1Xan
17.01.2006
23 - это не для программистов, а для олимпиады по математике в 8 классе :)
Диаметр окружности, описанной вокруг прямоугольного треугольника, равен длине гипотенузы. Которая, по теореме Пифагора, равна корню из суммы квадратов катетов. R = 10 :)

28.a (Для мэнеджеров, наверное) Вы - добрый эльф, меткий стрелок из лука. За Вами гонится отряд из 10 орков, злах и эгоистичных тварей. К счастью, они пока далеко позади. К несчастью, через какое-то время они Вас догонят и съедят. К счастью у Вас есть стрелы, которыми Вы можете разить орков наповал. К еще большему счастью, на одного орка хватает одной стрелы и бьете Вы без промаха. К несчастью, у Вас имеется только 5 стрел. К еще большему несчастью, орки об этом знают. Как Вам спастись? (D.Friedman)


Бегать от орков по кругу, повторно используя выпущенные стрелы (из упавших орков их выдёргивая)
Счего ты взял что удастся бегать по кругу?
Задачку (17) про собак читал думешь они будут бегать по кругу?
пока это единственная задача для которой я немогу найти решения.
Т.е. решения как подобраться к стреле.
Если орки не глупые, то никак. Они просто могут сами забрать себе стрелы из убитых.
Блин точно,
или поломать их
танк
17.01.2006
это зависит от того с какой скоростью бегают орки - с одинаковой или с разной

20. Как провести электричество, чтобы свет на лестнице можно было включать/выключать и с верхней площадки, и с нижней. Нарисуйте схему проводки.


--> схема
nnstepan
17.01.2006
Зачот, я не догадался...
Yakov-K
17.01.2006
Баян и даже не вековой :)
Задача про монеты для поцанов постарше:

Есть две кучки монет в каждой по 7 штук.
Сколько минимально взвешеваний на простых весах-чашечках надо чтобы доказать что в одной из кучек ВСЕ, а в другой ВСЕ настоящие.
т.е. для определенности доказать что в 1-ой кучке все монеты фальшивые.

фальшый монеты легче настоящих, и каждая монета весит столько же как и любая другая в своем типе.
nnstepan
17.01.2006
Что-то условия не понял, опиши подробнее.
Есть две кучи монет, в каждой по 7 штук.
утверждается что в 1-й куче все монеты фальшивые, а во 2-й - настоящие. Сколько нужно взвешиваний чтобы это доказать?
Весы чашечные,
фальшивые монеты легче.
Все фальшивые и все настоящие монеты весят одинаково.
Dr. ABT
17.01.2006
1
Даже если в 1-й куче одна настоящая?
Dr. ABT
17.01.2006
взять в каждой куче по 1 одинаковой монете и взвесить, настоящая монета в той чаше, которая опуститься ниже
Нужно доказать что ВСЕ монеты из 1-й кучи фальшивые, а не одна.
Dr. ABT
17.01.2006
так сказано же, что в одно ВСЕ фальшивые а в другой ВСЕ настоящие, если мы взяли из кучи манету и доказали что она настоящая то все монеты в куче настоящие

p.s. мож я конечно и путаю, устал что то :)
Это утверждение, которое нужно доказать.
"Сколько нужно взвешиваний чтобы это доказать? "
Dr. ABT
17.01.2006
Ясно, условие не понял сразу
Интересует конечно минимальное количество взвешиваний
Shooter
19.01.2006
Psycho писал(а)
13. На консоли Xbox адрес пикселя с координатами x, y записывается в двоичной форме как x7 y7 x6 y6 x5 y5 x5 y5 x4 y4 x3 y3 x2 y2 x1 y1 x0 y0 (где xn, yn - соответствующие биты чисел x и y). Дан пиксель с адресом a, найти адрес его соседа справа (Visual Concepts)

b = (((a | 43690) + 1) & 21845) | (a & 43690);
Осталось повнимательней прочитать задачу или уточнить как идет ось Х
Shooter
20.01.2006
Psycho писал(а)
14. Дана строчка текста, переставить в ней все слова в противоположном порядке, так чтобы, например, строчка "Здесь был Вася" превратилась в "Вася был Здесь". Дополнительную память выделять не разрешается (популярная задача)

Если нельзя выделять только доп память под хранение строки или ее частей, то все просто.

#include "stdafx.h"

void swap(char *v, int beg, int end)
{
for(int i = 0; i < (end - beg) / 2; i++){
v[beg + i] = v[beg + i] + v[end - 1 - i];
v[end - 1 - i] = v[beg + i] - v[end - 1 - i];
v[beg + i] = v[beg + i] - v[end - 1 - i];
}
}

int main()
{
char v[] = "Vasya was here blia";

printf("%s\n", v);
swap(v, 0, sizeof(v) / sizeof(char) - 1);
for(int i = 0, beg = 0; i < sizeof(v) / sizeof(char); i++){
if(v == ' ' || v == ''){
swap(v, beg, i);
beg = i + 1;
}
}
printf("%s\n", v);
}

Тут 3 инта пришлось объявить.
Если совсем нельзя выделять никакую память, то вот так сходу х.з.
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Форум Тема (Автор) Последний ответ Ответов
Принтер лазерный HEWLETT PACKARD HP-6L

Принтер лазерный HEWLETT PACKARD HP-6L Отправка в регионы после оплаты. 3штуки БУ. Внешний вид из магазина простояли на складе...
Цена: 4 500 руб.

Сетевой фильтр APC Surge Arrest

Сетевой фильтр APC Surge Arrest для радиолюбителя.и не только Отправка в регионы после оплаты. ЦЕНА 3000 руб. В рабочем состоянии....
Цена: 3 000 руб.

Материнские платы на запчасти и не только

Материнские платы на запчасти и не только Материнские платы и другие комплектующие Отправка в регионы после оплаты. Транспортной...
Цена: 3 000 руб.

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9 Отправка в регионы после оплаты. Продаются сразу обе. Цена за обе 2000 руб....
Цена: 1 000 руб.