Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


etc:users:fun

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
etc:users:fun [2010/01/28 07:19] jcmvbkbcetc:users:fun [2016/08/08 20:53] – ↷ Page moved from users:fun to etc:users:fun kel
Line 18: Line 18:
 Если в задаче разрешено использовать дополнительную память, то решение простое, с помощью стека. Пришли в вершину заносим в стек (что имено заносим и в каком порядке зависит от того, какой обход нужен: КЛП, ЛКП и т.д.) Если в задаче разрешено использовать дополнительную память, то решение простое, с помощью стека. Пришли в вершину заносим в стек (что имено заносим и в каком порядке зависит от того, какой обход нужен: КЛП, ЛКП и т.д.)
  
-**И чем же это отличается от рекурсии? У этой задачи есть решение без использования ополнительной памяти.**+**И чем же это отличается от рекурсии? У этой задачи есть решение без использования дополнительной памяти.** 
 + 
 +Ну формально это не рекурсия, врочем, не важно, если есть другое решение будем думать)
  
 23. Есть круглый бассейн. От его бортика в направлении точно на север отплыла рыба. Проплыв 6 метров, она опять столкнулась с бортиком. Тогда рыба повернула на восток, проплыла еще 8 метров и опять столкнулась с бортиком. Найти диаметр бассейна. (опять Мартин Гарднер)  23. Есть круглый бассейн. От его бортика в направлении точно на север отплыла рыба. Проплыв 6 метров, она опять столкнулась с бортиком. Тогда рыба повернула на восток, проплыла еще 8 метров и опять столкнулась с бортиком. Найти диаметр бассейна. (опять Мартин Гарднер) 
Line 39: Line 41:
 **Решение** **Решение**
 Мы точно знаем, что в 00:00:00 все стрелки сходятся вместе, в следующий раз они сойдутся (грубая оценка) в интервале от 01:00:00 до 02:00:00, потом в интервале от 02:00:00 до 03:00:00 и тд, последний раз такое случится в интервале от 10:00:00 до 11:00:00 (рассматриваем только 12 часов, потому что дальше все повторяется), таким образом мы получили 11 интервалов, тогда требуемое событие происходит с периодом 1 час + 1/11 часа (12/11), зная начальное решение (00:00:00) мы можем получить все. Кстати задача имеет и строгое математическое решение, но его неудобно сюда вписывать. Мы точно знаем, что в 00:00:00 все стрелки сходятся вместе, в следующий раз они сойдутся (грубая оценка) в интервале от 01:00:00 до 02:00:00, потом в интервале от 02:00:00 до 03:00:00 и тд, последний раз такое случится в интервале от 10:00:00 до 11:00:00 (рассматриваем только 12 часов, потому что дальше все повторяется), таким образом мы получили 11 интервалов, тогда требуемое событие происходит с периодом 1 час + 1/11 часа (12/11), зная начальное решение (00:00:00) мы можем получить все. Кстати задача имеет и строгое математическое решение, но его неудобно сюда вписывать.
 +
 +20. Как провести электричество, чтобы свет на лестнице можно было включать/выключать и с верхней площадки, и с нижней. Нарисуйте схему проводки.
 +
 +**Решение**
 +
 +{{users:схема.png|}}
 +Задан источник постоянного тока, но в данном случае это не важно. Свет горит, когда оба выключателя замкнуты на одну внешнюю ветвь. Должно быть решение более сложное, но с одной лампочкой (кстати лампочка обозначена чисто формально, там может быть целая система световых приборов).
 +
 +Может {{users:jcmvbkbc:problems-scheme-2.png|}} ? ага так, чет про более сложное решение я косанул)
 +
 +4. Что делает следующий С++ код? (Matt Marcus)
 +
 +<code cpp>.
 +struct A {
 +   A(const volatile void*);
 +};
 +
 +char f(A);
 +int f(...);
 +
 +template <class T>
 +struct Test {
 +   static const int value = (sizeof(f(*(T*)0)) == sizeof(char));
 +};
 +
 +</code>
 +
 +**Решение**
 +*(T*) 0 - я немного не уверен в этой конструкции (как я понял, (Т*) 0 - это приведение 0 к типу T*, а первая * - это разыменование???), но в целом, (sizeof(f(*(T*)0)) - проверяет размер возвращаемого значения для функции с параметром типа Т, сравнивает с размером типа char, и таким образом, если для Т = А, то (sizeof(f(*(T*)0)) = 1, для T != A, получим (sizeof(f(*(T*)0)) = 4 (ну я принял, что sizeof(char) = 1 и sizeof(int) = 4), ну и в зависимости от того, какой тип передан в качестве T, value равно 0 или нет. Вот как-то так.
etc/users/fun.txt · Last modified: 2016/08/08 20:53 by kel