设有编号为1,2,…,n的n个人围成一个圈,给定一个密码m,从第一个人开始报数,报到m是停止报数,报m的人出圈,再从他的下一个起重新报数,报到m时停止报数,报m的出圈,…,如下下去,直到所有人全部出圈为止。键盘输入n和m的值,请设计程序输出n个人出圈的次序。
输入初始圈中的人数n,占一行 输入密码m,占一行
输出出圈的n个人的次序,以空格隔开,最后一个元素后有空格
10 3
3 6 9 2 7 1 8 5 10 4
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct person{ int num; struct person* next; }P; int main() { int n,m; scanf("%d%d",&n,&m); P* ph=(P*)malloc(sizeof(P)); ph->next = NULL; P* a = ph; for(int i=0; i<n; i++) { P* p=(P*)malloc(sizeof(P)); p->num = i+1; a->next = p; a = p; if(i!=n-1) { p->next = NULL; } else{ p->next = ph->next; } } a = ph->next; int N=n, M=m,i=0; P* pre = NULL; while(N--) { if(M==1){ M=m; } while(M != 1){ pre = a; a = a->next; M--; } printf("%d ",a->num); a = a->next; pre->next = a; } return 0; }