...至100按顺时针围成一圈,首先取出1,然后顺时针方向按步长L=30取数...
发布网友
发布时间:2024-04-04 01:50
我来回答
共2个回答
热心网友
时间:2024-08-18 03:29
这其实就是一个约瑟夫环问题,你百度一下就知道了
类似于已知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;
}
(用单向链表,双向链表实现见我的空间)
热心网友
时间:2024-08-18 03:32
我认为这个题目用筛选法做就容易了,所谓筛选法就是把已经找到的数吃掉(就是把它的值设为0),然后再继续找。