约瑟夫环

题目:约瑟夫环
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

int Josephus (int sum, int signal)
{
      if (sum < 1 || signal < 1)
            return -1;

      int call_off_times = 0;
      for (int i = 2; i <= sum; i++)
            call_off_times = (call_off_times + signal) % i;

      return call_off_times;
}

int main ()
{
      int n, m;
      cin >> n >> m;
      cout << "We need call " << Josephus (n, m) << " times" << endl;
      return 0;
}

你可能感兴趣的:(约瑟夫环)