zoukankan      html  css  js  c++  java
  • poj2244 约瑟夫环

    这个题目说给出n个数,第一个数必须出列,然后计算编号从2-n开始,使得2最后一个出列的最小的m值,其实也就是n-1约瑟夫环,从1-n-1

    s=1;

    for(i=2;i<=n-1;i++)

      s=(s+m)%i;

    if(s==1)

      m为所求,我们让m从1开始。。

    源码如下:

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    const int MAX=150;
    int main()
    {
     int i,s,n,m,rs[MAX];
     for(n=3;n<MAX;n++)
     {
      m=1;
      while(1)
      {
       s=1;
       for(i=2;i<=n-1;i++)
       {
        s=(s+m)%i;
         if(s==0)
          s=i;
       }
       if(s==1)
       {
        rs[n]=m;
        break;
       }
       else
        m++;
      }
     }
     while(1)
     {
      scanf("%d",&n);
      if(!n)
       break;
      printf("%d\n",rs[n]);
     }
    //递归方法求约瑟夫环,下标从1-n编号
    //  int s=1,i,n,m;
    //  n=4;
    //  m=3;
    //  for(i=2;i<=n;i++)
    //  {
    //   s=(s+m)%i;
    //   if(s == 0)
    //    s=i;
    //  }
    //  cout<<s<<endl;
     return 0;
    }

  • 相关阅读:
    php简单实现MVC
    windows获取窗口句柄
    UPX编译及so加固
    Markdown: Syntax
    Markdown: Syntax Text
    BIOS将MBR读入0x7C00地址处(x86平台下)
    TPFanControl.ini
    深入浅出GNU X86-64 汇编
    CPU vector operations
    Google开源项目风格指南
  • 原文地址:https://www.cnblogs.com/buptLizer/p/2167540.html
Copyright © 2011-2022 走看看