zoukankan      html  css  js  c++  java
  • 约瑟夫问题的递归公式

    1,2....N  f(N) = ?

    1. N = 3k

       1,2,4,5..............3k-2 3k-1 剩下 2 * N / 3个。r = f(2k)

       则f(N) = ((r-1)/2) * 3 + 2 - r%2

    2. N = 3k + 1, r = f(2k+1)
       则 if r = 1
        f(N) = 3k+1;
          else
            f(N) = ((r-2)/2) * 3 + 2 - (r-1)%2

    3. N = 3k+2,r = f(2k+2)
        if r = 1
           f(N) = 3k+1
        else if r = 2
           f(N) = 3k+2
        else

           f(N) = ((r-3)/2) * 3 +2 - (r-2)%2

     1 
     2 #include <iostream>
     3 using namespace std;
     4 
     5 int f(int n)
     6 {
     7     if(n == 2)
     8         return 2;
     9     int k = n / 3;
    10     if(n % 3 == 0)
    11     {
    12         int r = f(2*k);
    13         return ((r - 1)/2* 3 + 2 - r%2;
    14     }else if(n%3 == 1)
    15     {
    16         int r = f(2*k+1);
    17         if (r == 1)
    18             return 3*k+1;
    19         return ((r - 2)/2* 3 + 2 - (r-1)%2;
    20     }
    21     else{
    22         int r = f(2*k+2);
    23         if (r == 1)
    24         {
    25             return 3*k+1;
    26         }
    27         if (r == 2)
    28         {
    29             return 3*k+2;
    30         }
    31         return ((r - 3)/2* 3 + 2 - (r-2)%2;
    32     }
    33 }
    34 int main()
    35 {
    36     cout << f(17<< endl;
    37     return 0;
    38 }


     
  • 相关阅读:
    分层领域模型
    JAVA集合Set 交集、差集、并集
    http状态码301和302详解及区别
    设计模式(16) 命令模式
    设计模式(15) 解释器模式
    设计模式(14) 模板方法模式
    设计模式(13) 职责链模式
    设计模式(12) 代理模式
    设计模式(11) 享元模式
    设计模式(10) 外观模式
  • 原文地址:https://www.cnblogs.com/speedmancs/p/1851751.html
Copyright © 2011-2022 走看看