回 帖 发 新 帖 刷新版面

主题:转圈相除

大家好!我在做作业是时碰见这样一个题:有人围成一圈(编号为1到17),从第1号开始进行1,2,3报数,凡报3者退出,写一个人又从1开始报数……直到最后只剩下一个人为止。请问此人原来的位置是多少号?把我编死了!我现在没辙了!请高手帮帮忙!感激不尽!

回复列表 (共11个回复)

11 楼


[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]

我来回复

您尚未登录,请登录后再回复。点此登录或注册