主题:转圈相除
yaoyinglong
[专家分:0] 发布于 2010-06-14 18:16:00
大家好!我在做作业是时碰见这样一个题:有人围成一圈(编号为1到17),从第1号开始进行1,2,3报数,凡报3者退出,写一个人又从1开始报数……直到最后只剩下一个人为止。请问此人原来的位置是多少号?把我编死了!我现在没辙了!请高手帮帮忙!感激不尽!
回复列表 (共11个回复)
11 楼
josephkwok [专家分:530] 发布于 2010-06-26 23:12:00
[code]
#include <iostream>
using namespace std;
#define N 17
#define D 2 //每隔2個剔除一個
int main()
{
int a[N],b[N],i,d=0,s=0,n=N-1,j=0;
for (i=0;i<N;i++)
a[i]=i+1;
i=0;
while (i<=n)
{
for (i=0;i<=n;i++)
{
if (d!=D)
{
d++;
a[s++]=a[i];
}
else
{
d=0;
b[j++]=a[i];
}
}
n=s-1;
i=s=0;
}
for (i=0;i<N;i++)
cout<<b[i]<<endl;
return 0;
}
[\code]
[/code]
我来回复