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
这个题一看就是建立一个循环链表,然后不断地循环遍历记录,之后再输出。
下面贴上咱们的代码。
这个题其实比较好想,但是中途出了很多bug,导致改bug的时候花的时间占了百分之八十。。。。。
#include<cstdio> #include<stdlib.h> struct Node{ int num; Node *next; }; //初始化链表,先建立一个循环链表,按照给定N值 ,返回循环链表尾端 Node* init(int a){ //由于最终要把尾结点和头结点链接起来,所以这里建立的是一个头结点。 Node *head=(Node*)malloc(sizeof(struct Node)); //然后这里就是经常用的工作指针了。 Node *p=head; p->num=1; //这里不等于二的原因是循环链表头结点和尾结点都比较特殊,给单独拿出来,剩下的就可以循环建立了。 while(a!=2){ Node *temp=(Node*)malloc(sizeof(struct Node));
123456789101112131415161718