PTA 7-2 约瑟夫环 (25 分)

    xiaoxiao2022-07-02  129

    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 <iostream> #include<malloc.h> using namespace std; typedef struct Node{ int data; Node *next; }LinkListNode; LinkListNode* Createlist(int n) { LinkListNode *head,*p,*q; head = (LinkListNode*)malloc(sizeof(LinkListNode)); p = (LinkListNode*)malloc(sizeof(LinkListNode)); head->data = 1; head->next = NULL; p = head; for(int i = 2;i <= n;i++) { q = (LinkListNode*)malloc(sizeof(LinkListNode)); q->data = i; p->next = q; p = q; } p->next = head; return head; } int main() { int N,p; cin >> N >> p; int ret[N]; int i = 0; LinkListNode *head,*ptr,*q; head = Createlist(N); ptr = head; while(i<N) { for(int j = 1;j < (p-1);j++) { ptr = ptr->next; } q = ptr->next; ret[i] = q->data; ptr->next = q->next; free(q); ptr = ptr->next; i++; } for(int j = 0;j<N-1;j++) { cout<<ret[j]<<' '; } cout << ret[N-1]; return 0; }

     

    最新回复(0)