約瑟夫環,魯智深吃饅頭之類的問題總結c++(不用迴圈連結串列)
阿新 • • 發佈:2018-11-30
今天看見這一類的題,覺得用迴圈連結串列太麻煩了,就想用某一種方法來代替迴圈連結串列,總結如下。
大致題意
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位置的人的序號。