josephus.c

来自「已知n个人(以编号1」· C语言 代码 · 共 43 行

C
43
字号
#include <stdio.h>
#include <stdlib.h>
/*josephus问题的算法
问题:有n个人坐在周旁围成一周,从第s个人开始报数,第m人出列,然后从下一个人重新开始报数,数到第m人又出列
如此反复,直到所有人全部出列位置。n,s,m给定,求出按出列次序得到的n个人员的序列*/
struct List
{
    DataType element[max];
    int n;
};
typedef struct List *Plist;
int deletelist(Plist palist, int p)
{
    int q;
    if (p<0||p>palist-> -1)
    {
        print("Not exist!\n");
        return 0;
    }
    for (q=p; q<palist->n -1;q++)palist->element[q]=palist->element[q+1];
    palist->n =palist->n -1;
    return 1;
}
void josephus(Plist palist, int s, int m)
{
    int s1, i;
    DataType w;
    s1 = s-1;
    for (i=palisht->n;i>0;i--)
    {
        s1=(s1+m-1)%i;
        w= retreve(palist,s1);//求出下标为s1的元素的值,此函数需要自己写出来!!!!!
        printf("Out person%d\n",w);
        deletelist(palist,s1);
    }
}

int main()
{
    printf("Hello world!\n");
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?