1. 程式人生 > >約瑟夫環,魯智深吃饅頭之類的問題總結c++(不用迴圈連結串列)

約瑟夫環,魯智深吃饅頭之類的問題總結c++(不用迴圈連結串列)

今天看見這一類的題,覺得用迴圈連結串列太麻煩了,就想用某一種方法來代替迴圈連結串列,總結如下。

大致題意
n 個人圍城一圈,從第一個人開始順序編號為1到n。從第1個人從1開始報數,數到3的人出圈。再由下一個人從1開始報數,數到3的人出圈,如此迴圈數下去,直到最後一個人出圈。(題意都差不多)

程式碼如下:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int n,counter=0,count=0;
    cin>>n;
    int
a[n],b[n]; fill(a,a+n,1); for(int i=0;i<n;i++) b[i]=i+1; for(int i=0;count<n;i++){ counter+=a[i%n]; if(counter==3){ counter=0; a[i%n]=0; cout<<b[i%n]<<" "; count++; } } return 0; }

來總結一下:


1)counter用來記錄有沒有數到規定的數,count用來計算出來了多少個人,這也是迴圈截止的條件。
2)a[]這個陣列用來判斷這個地方的人有沒有出去,b[]這個陣列用來儲存,對應a位置的人的序號。