C++寫經典算法

約瑟夫環問題

n個人(n<=100)圍成一圈,從第一個人開始報數,數到m的人出列,再由下一個人重新從1開始報數,數到m的人再出圈,……依次類推,直到所有的人都出圈,請輸出依次出圈人的編號.

雙鏈表解法

數組模擬(大數組)

#include<iostream>
#include<cstdio>
using namespace std; 
int a[100001];//定義數組
int main(){
    int bs=1,h=1,t,i,n,m;
    cin>>n>>m;
    for(i=1;i<=n;i++)
		a[i]=i;
    t=n+1;
    while(h<t){
        if(bs!=m){
            bs++;		//指針前移
            a[t]=a[h];
            t++;
            h++;
        }
        else{
            cout<<a[h]<<"  ";//輸出 
            bs=1;
            h++;
        }
    }
   
    return 0;//返回
}

遞歸法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章