问题标题: 酷町堂:4000 报数游戏2

0
0
已解决
武建豪
武建豪
中级天翼
中级天翼

有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。本题要求编写函数,给出每个人的退出顺序编号。

武建豪在2021-08-03 12:04:05追加了内容

4000   报数游戏2

经验值:0 时间限制:1000毫秒

题目描述 Description

有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。本题要求编写函数,给出每个人的退出顺序编号。

输入描述 Input Description

输入两个数据n和m,其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)

输出描述 Output Description

输出每个人的退出顺序编号(第几个人的退出次序是几)

样例输入 Sample Input

12 5

样例输出 Sample Output

12 10 3 5 1 11 8 7 4 2 9 6

数据范围及提示 Data Size & Hint

2<=n<=50
0<m<n


0
已采纳
吕若朴
吕若朴
中级光能
中级光能

这题是一道模拟题!

(别听他的定义函数)

用cnt记录人数,运用while循环,cnt为1是退出

用i记录当前指向的编号,sum记录此轮已经遍历到了第几个人

用vis数组(bool)记录当前此人是否已经出队

如果已出队,则跳过

否则sum++

如果sum已经遍历到了m个人,那么就把i输出,vis数组记录一下他已经出队

1
王文博
王文博
缔造者之神
缔造者之神

核心:

res=n;
    while(res>0)
    {
        if(!a[pos])
        {
            cnt++;
            if(cnt==m)
            {
                a[pos]=1;
                cnt=0;
                res--;
                c[pos]=n-res;
            }
        }
        pos++;
        if(pos>n)
        {
            pos=1;
        }
    }

 

1
王文博
王文博
缔造者之神
缔造者之神
for(int i=1;i<=n;i++)
    {
        cin>>a>>b>>c>>d;
        maxn=max(a,max(b,max(c,d)));
        minn=min(a,min(b,min(c,d)));
        if((a+b+c+d)/4.0>90.24)
        {
            cout<<"A"<<endl;
        }
        else if((a+b+c)/3.0>80.3&&d>=90)
        {
            cout<<"B"<<endl;
        }
        else if(maxn==100&&minn>=60)
        {
            cout<<"C"<<endl;
        }
        else
        {
            cout<<"D"<<endl;
        }
    }

别举报!

0
王文博
王文博
缔造者之神
缔造者之神

这道题目和3999很像,唯一的差别就是要另外搞一个数组,让这个数组来存退出的次序

这个很简单。

设n为总人数,res为剩余的人数,那么c[pos]=n-res;

然后输出即可。

望采纳!

0
0
王文博
王文博
缔造者之神
缔造者之神

定义变量:

int n,pos=1,cnt,b,res,m;

bool a[55];

int c[55];

输出直接按顺序输出c数组即可(循环从1-n)

我要回答