вторник, 2 ноября 2010 г.

Try to f(f(n)) == -n

Увидел недавно интересный вопрос.
Написать такую функцию f, что: f(f(n)) == -n

У кого какие идеи?

Вот самый простой вариант на мой взгляд (правда это не совсем функция):
#define f(n) 0-n
Ну а вот посложнее (правда тут получается 2 функции с одним именем):

template<typename T>
struct param
{
   T n;
   param(T t) : n(t) {}
};

template<typename T>
param<T> f(T n)
{
   T a = (1&(n^(n>>1)));
   n ^= (a ? 0xAA : 0x55);
   return param<T>(n);
}

template<typename T>
T f(param<T> n)
{
   return f(n.n).n + 1;
}

(ссылка - http://codepad.org/TK0GhhAe)

Этот код пока работает только для char.
Так было намного быстрее прогонять полный тест))
Нетрудно модифицировать его для остальных типов.


Читать дальше

Printf структуры?

Угадайте с трёх раз, что выведет следующий код, скомпилированный VS2008?

struct A
{
   int a;
   int b;
   int c;
};

A a = { 10, 20, 30 };

printf("%d %d %d\n", a);


Да, именно то самое: "10 20 30".
И вообще нет никакой проверки типов,
а следовательно и неявного кастования.
Кто, что думает по этому поводу?

Вот что думают на StackOverflow: http://stackoverflow.com/questions/4081491

Читать дальше