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;
    }

  • 相关阅读:
    element多选下拉框的坑
    滚动条样式全局修改
    element表格自带排序的坑
    c++学习
    HTTP与TCP的区别和联系
    JSP整理
    学习目标
    mysql操作
    JAVA Date、String、Calendar类型之间的转化
    后台数据类型接收问题总结
  • 原文地址:https://www.cnblogs.com/buptLizer/p/2167540.html
Copyright © 2011-2022 走看看