约瑟夫环
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
```c
#include<stdio.h>
#include<stdlib.h>
typedef int Status; //设置函数的返回类型为int
typedef int ElemType; //设置元素数据类型为int
typedef struct LNode //定义结点结构
{
ElemType data; //结点包含一个数据域
struct LNode *next; //结点还包含一个指向结点类型的指针
}LNode,*LinkList; //命名为Lnode和指针型Linklist
LinkList InitList(int t) //构造链表的函数,返回值为一个结点的指针
{
LinkList L,s,g; //先声明三个结点指针,L为尾部,s为头部,g为随着结点个数增加而动态创建的指针
L=(LinkList)malloc(sizeof(LNode));
s=L; //将第一个创建的指针赋值给头部
int i;
for(i=1;i<=t-1;i++)
{