Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Дмитрий Коняев ([info]dimchansky)
@ 2004-06-04 17:12:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Решение задачи Иосифа Флавия
По поводу ранее упомянутой задачи Иосифа Флавия, то получается, что он с самого начала должен был стать 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;
}