王道训练营 作业

王道训练营 作业设编号为 1 2 n 的 n 个人围坐一圈 约定编号为 k 1 lt k lt n 的人从 1 开始报数 数到 m 的那个人出列 它的下一位又从 1 开始报数 数到 m 的那个 人又出列 依次类推 直到所有人出列为止

大家好,我是讯享网,很高兴认识大家。
  1. 设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从
    1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个
    人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef struct list { int val; struct list* next; }listnode,circularlist; int main() { struct list; //创建单链表 listnode* phead,*pa; phead = (listnode*)malloc(sizeof(listnode)); pa = phead; phead->next = nullptr; //创建环形链表 circularlist* head, *pre; head = (circularlist*)malloc(sizeof(circularlist)); pre = head; head->next = nullptr; int i = 1; int n = 0; printf("请输入n,k,m\n"); scanf("%d", &n); for ( i = 1; i < n+1; i++) { circularlist* newnode; newnode = (circularlist*)malloc(sizeof(circularlist)); newnode->val = i; newnode->next = nullptr; pre->next = newnode; pre = newnode; } pre->next = head->next;//让尾节点指向头结点的下一个结点 circularlist* tail=head->next; circularlist* ppre = head; int k ,m; scanf("%d", &k); scanf("%d", &m); int num = 0; while (ppre!=tail) { if (tail->val == k && num == 0) { num = 1; } if (num == m) { pa->next = tail; pa = pa->next; ppre->next = tail->next; //printf("%d ", tail->val); tail = tail->next; num = 1; } tail = tail->next; ppre = ppre->next; if (num > 0) { num++; } } /*printf("%d ", tail->val); printf("\n");*/ pa->next = tail; pa = tail; pa->next = nullptr; listnode*cur = phead->next; while (cur!= nullptr) { printf("%d ", cur->val); cur = cur->next; } return 0; } 

讯享网

在这里插入图片描述
讯享网

小讯
上一篇 2025-03-31 20:18
下一篇 2025-03-20 16:24

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24761.html