#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
Node *circle_create(int n);
void count_off(Node *head, int n, int k, int m);
int main() {
int n, k, m;
scanf("%d%d%d", &n, &k, &m);
Node *head = circle_create(n);
count_off(head, n, k, m);
return 0;
}
Node *circle_create(int n) {
Node *temp, *new_node, *head;
int i;
// 创建第一个链表节点并加数据
temp = (Node *) malloc(sizeof(Node));
head = temp;
head->data = 1;
// 创建第 2 到第 n 个链表节点并加数据
for(i = 2; i <= n; i++) {
new_node = (Node *) malloc(sizeof(Node));
new_node->data = i;
temp->next = new_node;
temp = new_node;
}
// 最后一个节点指向头部构成循环链表
temp->next = head;
return head;
}
void count_off(Node *head, int n, int k, int m) {
int cnt=0;
Node *cur = head;
Node *pre = head;
for(int i=1;i<n;i++)
pre = pre->next;
for(int i=1;i<k;i++)
cur = cur->next;
while(cnt<n)
{
for(int i=1;i<m;i++){
pre = cur;
cur = cur->next;
}
printf("%d",cur->data);
pre->next = cur->next;
free(cur);
cur = pre->next;
cnt++;
if(cnt<n)
printf(" ");
}
printf("\n");
return;
}
约瑟夫环问题
原创
©著作权归作者所有:来自51CTO博客作者小魏同学yyds的原创作品,请联系作者获取转载授权,否则将追究法律责任
约瑟夫换问题
上一篇:树的全面总结(持续更新)
下一篇:输出最长的名字
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【Phaser游戏开发】动画效果-舞动的蝴蝶环
舞动的蝴蝶圆环,蝴蝶群飞舞
Game Phaser 舞动的蝴蝶圆环 蝴蝶群飞舞