Написать такую функцию 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.
Так было намного быстрее прогонять полный тест))
Нетрудно модифицировать его для остальных типов.
Читать дальше