c語言約瑟夫環問題
發布時間: 2024-04-23 10:21:34
A. 將自然數1至100按順時針圍成一圈,首先取出1,然後順時針方向按步長L=30取數(已取出的數不再參加計數),
這其實就是一個約瑟夫環問題,你網路一下就知道了
類似於已知100個人(以編號1,2,3...100分別表示)圍坐在一張圓桌周圍。從編號為1的人開始報數,數到30的那個人出列;他的下一個人又從1開始報數,數到30的那個人又出列;依此規律重復下去,直到圓桌周圍只剩下一個人,求這個人的編號。
數組實現
#include<iostream.h>
int main()
{
const int n=100;
int m=30;
int a[n];
for(int j=0;j<n;j++)
a[j]=j+1;
int k=1;
int i=-1;
while(1)
{
for(int j=0;j<m;)
{
i=(i+1)%n;
if(a[i]!=0)
j++;
}
if(k==n)
break;
a[i]=0;
k++;
}
cout<<a[i]<<endl;
return 0;
}
(用單向鏈表,雙向鏈表實現見我的空間)
熱點內容