美文网首页
一个程序题

一个程序题

作者: 狗嗨旺 | 来源:发表于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