Решение задачи Иосифа Флавия
По поводу ранее упомянутой
задачи Иосифа Флавия, то получается, что он с самого начала должен был стать 31-ым.
#include <iostream>
template <int Q, int N>
struct J
{
enum { good_place = ( J<Q,N-1>::good_place + Q ) % N };
};
template <int Q>
struct J<Q,2>
{
enum { good_place = Q % 2 };
};
template <int Q>
struct J<Q,1>
{
enum { good_place = 0 };
};
template <int Q, int N>
void PrintRez()
{
std::cout << "Всего " << N << " человек. Убивают каждого " << Q << "." << std::endl;
std::cout << "С самого начала выживает позиция " << (J<Q,N>::good_place + 1) << ". Если считать людей с 1." << std::endl;
}
int main(int argc, char* argv[])
{
PrintRez<3,41>();
return 0;
}