n个人围成一圈报数,数到3的人出局:
//约瑟夫环
//循环链表实现
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct node{
int num; //序号
//elemtype data;
struct node *next;
}*linklist;
void Joseph(int n);
void Joseph(int n){
linklist p, q, s;
elemtype e;
int countSum = n;//总计数
int count = 1;
s = (linklist)malloc(sizeof(node));//第一个节点
if (!s) exit(0);
s->num = 1;
//s->data = 1;
s->next = NULL;
p = s; //q = s;
for (int i = 2; i <= n; i++){
q = (linklist)malloc(sizeof(node));
q->num = i;
//q->data = 1;
p->next = q;
q->next = NULL;
p = q;
}
p->next = s;
p = s->next;
q = s;
while (countSum> 2){
p = p->next;
q = q->next;
count++;
if (count == 2){
q->next = p->next;
e = p->num;
printf("kill %d\n",e);
free(p);
p = q->next;
count = 0;
countSum--;
}//if
}//while
printf("remain:\n");
printf("%d->",p->num);//输出剩下的第1个元素
p = p->next;
printf("%d->", p->num);//输出剩下的第2个元素
}
void main(){
int n;
printf("输入参加人数:");
scanf("%d",&n);
Joseph(n);
system("pause");
}