7-5 约瑟夫环 (25分)

耗尽温柔 提交于 2019-12-20 14:11:24

N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。

输入格式:

输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。

输出格式:

按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。

输入样例:

在这里给出一组输入。例如:

7 3

输出样例:

3 6 2 7 5 1 4

代码:递归

 

#include<stdio.h>
#include<stdlib.h>
int ysf(int n,int m,int i)
{
    if(i==1)
        return (n+m-1)%n;
    else
        return (ysf(n-1,m,i-1)+m)%n;
}
int main()
{
    int n,m;
    int i;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        printf("%d",ysf(n,m,i)+1);
        if(i!=n)
        printf(" ");
    }
    return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!