#include "iostream.h"
void playGame(int a1,int b)
{
int i = 1;
int n = 1;
int *a;
a = new int[a1];
for(int j = 1; j <= a1; j++)
{
a[j] = j;
}
int flag = b;
int Num = 0;
int aflag = a1 - 1;
cout<<"传递过来的值:"<<a1<<" "<<b<<endl;
cout<<"跳出圈的数字:"<<" ";
while(Num != aflag)
{
if(a[i] != 0)
{
if(n != flag)
{
i++;
n++;
}
else if(n == flag)
{
cout<<a[i]<<" ";
Num++;
a[i] = 0;
n = 1;
if(i = a1)
i = 1;
else 
i++;
}
}
else if(a[i] == 0)
{
if(i != a1)
{
i++;
}
else if(i == a1)
{
i = 1;
}
}
}
cout<<endl;
}
int main(int argc, char* argv[])
{
int T1,T2;
int flag = 1;
while(flag != 0)
{
cin>>T1>>T2;
playGame(T1,T2);
cout<<"按0退出!!!!!!!!!!!"<<endl;
cin>>flag;
}
return 0;
}

解决方案 »

  1.   

    主是N个人组成一个圈.以M为一个flag,当某个人报到为M时,就退出..后面就又以1为开始报数..一直轮下去..直到最后只有一个人为止...就这样..上面我还没有写完整呀.还没有限定两个数大小..
      

  2.   


    #include "iostream.h"
    void playGame(int a1,int b)
    {
    int ac =a1;
        int i = 1;
        int n = 1;
        int *a;
    a = new int[ac];
        for(int j = 1; j <= a1; j++)
            a[j] = j;
        int flag = b;
        int Num = 0;
        int aflag = a1 - 1;
    cout<<endl;
        cout<<"传递过来的值:"<<a1<<" "<<b<<endl;
        cout<<"跳出圈的数字:"<<" ";
        while(Num != aflag)
        {
            if(a[i] == 0)
    {
    if(i < a1)
    i++;
    else
    i = 1;
    }
    else 
    {
    if(n != flag)
    {
    n++;
    if(i < a1)
    i++;
    else
    i = 1;
    }
    else
    {
    cout<<a[i]<<" ";
    a[i] = 0;
    n = 1;
    Num++;
    if(i < a1)
    i++;
    else
    i = 1;
    }
    }
        }
        cout<<endl;
    i = 1;
    while(a[i] == 0)
    i++;
    cout<<"LUCKY BOY IS: "<<a[i]<<endl;
    }
    int main(int argc, char* argv[])
    {
        int T1,T2;
        int dflag = 1;
        while(dflag != 0)
        {
            cin>>T1>>T2;
    if(T1 < T2)
    {
    cout<<"请输入T1>T2的两个数!!"<<endl;
    continue;
    }
            playGame(T1,T2);
            cout<<"按0和字符退出!!!!!!!!!!!"<<endl;
            cin>>dflag;
        }
        return 0;
    }这是我改版后的..总算正常了..请大家评评怎么样呀...
      

  3.   


    void playGame(int n,int m)
    {
        bool* bExists = new bool[n]; //标识是否已经出圈
        for(int i=0;i<n;i++)bExists[i]=true;
        int existMen = n; //没有出圈的人数
        int lastMan; //标识最后一个人
        int num; //报号
        int startIndex = 0; //当前报号的人
        while(existMen > 1)
        {
            num = 0;
            while(num<m)
            {
                if(bExists[startIndex%n])
                {
                    if(num+1 < m)
                    {
                        cout<<startIndex%n+1<<"号:"<<++num<<" 还好,还好……"<<endl;
                        lastMan = startIndex;
                    }
                    else
                    {
                        cout<<startIndex%n+1<<"号:"<<++num<<" 太不幸了,出圈了,555"<<endl;
                        bExists[startIndex%n] = false;
                        existMen --;
                    }
                }
                startIndex ++;
            }    }
        cout<<lastMan%n+1<<"号:我得儿意的笑,得儿意的笑 ^_^"<<endl;
    }
    int main(int argc, char* argv[])
    {
        int T1,T2;
        int dflag = 1;
        while(dflag != 0)
        {
            cout<<"请输入总人数:";
            cin>>T1;
            cout<<"跳出圈的数字(不大于总人数):" ;
            cin>>T2;
            if(T1 < T2)
            {
                cout<<"跳出圈的数字不能大于总人数!"<<endl;
                continue;
            }
            playGame(T1,T2);
            cout<<"按0和字符退出!!!!!!!!!!!"<<endl;
            cin>>dflag;
        }
        return 0;
    }
      

  4.   

    bool* bExists = new bool[n]; //标识是否已经出圈内存泄漏啊