有n个人围成一圈,并按一定顺序排号.从第一个人开始报数(从1到3),凡是报到3的人退出圈子,问最后留下的是原来第几号的那位?
(注意:请用c++做,如果有做上的朋友请把答案发到我的邮箱或者给我留意,谢谢了!!!)
哈哈,你太幸运了, 刚好这个题目在我的电脑上存有。
[CODE]#include<iostream.h>
//using namespace std;
void main()
{
    //建立小孩数组
    const int num=10;/*小孩数*/
    int interval;/*每次数 interval 个小孩,便让小孩离开*/
    int a[num];/*小孩数组*/
    /*给小孩编号*/
    for(int i=0;i<num;i++)/*小孩的编号只与小孩数相关*/
        a[i]=i+1;/*1至10个小孩*/
    /*输入数小孩间隔*/
    cout<<"Please input the interval:";/*输入一个数小孩个数*/
    cin>>interval;
    /*将全体参加的小孩输出*/
    for(int i=0;i<num;i++)/*顺序输出开始时的小孩编号*/
    {
        cout<<a[i]<<",";
        cout<<endl;
        int k=1;/*标识处理第K个离开的小孩*/
        int i=-1;/*数组下标(下一个值0就是第一个小孩的下标*/
        //处理获胜前的小孩
        while(1)
        {
            //在圈中数interval个小孩
            for(int j=0;j<interval;)
            {
                i=(i+1)%num;/*对下标加1求模*/
                if(a[i]!=0)/*如果该元素的小孩在圈中,则承认数数有效*/
                    j++;
            }
            if(k==num) break;/*该小孩是最后一个(胜利者)吗?*/
            cout<<a[i]<<",";/*输出离开的小孩之编号*/
                a[i]=0;/*标识小孩已离开*/
            k++;/*准备处理下一个圈中的小孩*/
        }
        /*break语句跳转到这里*/
        cout<<"\nNo."<<a[i]<<"Boy's won.\n";/*输出胜利者*/
    }
}[/CODE]
