一个程序题

五、算法题(1题*10分,合计10分) 用C或C++或JAVA实现:设有m个人围坐一圈,并已1..m编号,按1到n的报数,报数到第n数的人出圈,再从他的下一个人重新开始1到n的报数,如此进行下去,计算最后一人的编号。

没有实际测试过
int man[M+1] = {1};//m个人的数组,man[i] = 1;说明编号为i的人在圈内,否则出圈。
int n = 1;//当前报的数
int m = 1;//当前的人的编号
int counter = 0;//出圈的人数
while(counter<M-1)//当只剩一个人的时候跳出
{
    if(n == N && man[m]==1)//报数到N,并且这个人没出圈
    {
        man[m] = 0;//出圈
        counter++;//出圈人数加一
        n = 1;//重新开始报数
        m++;//下一个人的编号
        if(m>M)//如果绕完一圈则从编号为1重新开始
        {
            m = 1;
        }
    }
    else if(n!=N && man[m]==1))//报数没到N,并且这个人没出圈
    {
        n++;//下个人报数
        m++;
        if(m>M)
        {
            m = 1;
        }
    }
    else if(man[m]==0)//这个人出圈了
    {
        m++;//下个人再报数
        if(m>M)
        {
            m = 1;
        }
    }
}
for(int i = 1; i < M; i++)
{
    if(m[i] == 1)
    {
        cout<<i;//最后一个人的编号
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容