вторник, 22 января 2008 г.

Разминка для мозгов

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

№1. Дан массив целых чисел размерностью от 1..99. Массив содержит числа от 1 до 100 таким образом, что они не повторяются.  
Таким образом одно значение остаётся - оно не влезло в массив. 
Задача: найти оставшееся значение. (решений несколько, но одно из решений - математическое, красивое)

№2 Дана последовательность чисел 1..N. Необходимо вывести их на экран не используя циклов.
Значение N заранее не известно. (решение одно единственное)

№3 Сколько раз выполнится цикл
unsigned char c;
int c1 = 0, c2 = 255;
int count = 0;
for (c = c1; c <= c2; c ) {
        . . . 
}
(решение одно единственное, проверить его можно с помощью обычного компилятора)

Хочется предупредить что решение 3-й задачи не так просто, как может показаться на первый взгляд. Т.е. лучше убедиться наверняка, скомпилировав код. Один мой знакомый занимался решением этой задачи довольно значительное время и уже начал ругаться на нерадивость компилятора. Бедняга чуть не сошёл с ума, пришлось подсказать ему.

3 коммент.:

ilia комментирует...

Задача 2.

JAVA. П.Ноутон.Г.Шилдт. Наиболее полное руководство. В подлиннике
страница 172

Анонимный комментирует...

1 - решил сразу.
3 - решил, но прикольно.
2 - есть решение но не на C. Вообщем качаю книгу "JAVA. П.Ноутон.Г.Шилдт. Наиболее полное руководство. В подлиннике".

Алексей К. (xisit@mail.ru)

Анонимный комментирует...

Первое очень просто. Ещё в школе проходят, как узнать сумму от 1 до N, без всяких циклов и N сложений.

Второе на самом деле имеет много решений:
а) Если это массив, то его можно просто привести к строчке и вывести.
б) Если известно N на этапе компиляции, то через шаблоны (метапрограммированием), можно вывести весь массив.
в) Если речь о том, что просто нельзя использовать циклы, то остаётся рекурсия.

3) char и int сразу должны навести на мысль о переполнении )