c++解决约瑟夫环问题

【问题描述】

设计并实现一个解决约瑟夫环问题的类Joseph。当需要解决一个n个人间隔为m的约瑟夫环问题,可以构建一个对象Joseph obj(n, m),然后调用obj.simulate()输出模拟删除过程。

【输入形式】

  • 输入为三个正整数n和m和k,空格分隔,分别代表编号长度和间隔长度和起始位置,编号长度n<=50。

【输出形式】

  • 输出为n个整数,空格分隔。

    #include<iostream>
    #include<string>
    using namespace std;
    
    class Joseph
    {
     public:
         Joseph(int m_n,int m_m,int m_k)
         {
             n=m_n;
             m=m_m;
             k=m_k;
         }
         void simulate()
         {
             int a[1000]={0},i,j=0,t=0;
             for(i=k-1;t<n-1;i++)
            {
               if(a[i]!=1)
              {
                 j++;
              }
                if(j==m)
               {
                   cout<<i+1<<" ";
                  a[i]=1;
                  j=0;
                  t++;
               }
                if((i+1)==n)
               {
                  i=(-1);
               }
             }
             for(i=0;i<n;i++)
           {
            if(a[i]!=1) cout<<i+1<<endl;
           }
    
        }
     private:
        int n;
        int m;
        int k;
    };
    
    int main()
    {
    	int m,n,k;
    	cin>>n>>m>>k;
    	Joseph obj(n, m,k);
    	obj.simulate();
    	return 0;
    }
    

    注意可以用变量设置数组的长度但不能同时初始化


版权声明:本文为m0_67718152原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。