约瑟夫问题
一、问题描述
约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题。
更多了解请请点击这里:https://baike.baidu.com/item/%E7%BA%A6%E7%91%9F%E5%A4%AB%E9%97%AE%E9%A2%98/3857719?fr=aladdin
二、程序代码
#include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node *next; }NODE; NODE *create(int n) { int i=1; NODE *p=NULL,*head,*s; head=(NODE*)malloc(sizeof(NODE)); p=head; if(n!=0) { while(i<=n) { s=(NODE*)malloc(sizeof(NODE)); s->data=i++; p->next=s; p=s; } s->next=head->next; } free(head); return s->next; } int main() { int n=41; int m=3; int i; NODE *p=create(n); NODE *temp; m%=n; while(p!=p->next) { for(i=1;i<m-1;i++) { p=p->next; } printf("%d->",p->next->data); temp=p->next; p->next=temp->next; free(temp); p=p->next; } printf("%d\n",p->data); return 0; }
三、程序运行结果