美文网首页
一个程序题

一个程序题

作者: 狗嗨旺 | 来源:发表于2017-03-10 20:48 被阅读0次

五、算法题(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;//最后一个人的编号
    }
}

相关文章

网友评论

      本文标题:一个程序题

      本文链接:https://www.haomeiwen.com/subject/lppogttx.html