C语言 约瑟夫环问题:用户输入M,N…

来源:互联网 发布:怎样查询淘宝店铺贷款 编辑:程序博客网 时间:2024/05/29 18:22

#include <stdafx.h>
#include <stdlib.h>

struct number
{
int num;
struct number * next;
};

void main ()
{
int m, n;
struct number * p, * head=NULL, * tail;

printf("please input M and N:\n");
scanf("%d %d", &m, &n); //输入M、N值。

for (int i=1; i<=n; i++) //建立循环链表。
{
p=(struct number *)malloc(sizeof(struct number));
p->num=i;
if(head==NULL){
head=p;
tail=p;//注意开始tail也要赋值
}
else
tail->next=p;
tail=p;
}
tail->next=head;
p = tail; //从head开始,记录开始的前一个指针
while(n--) //剩下的数的个数为n
{ int t = m%n; //防止多数太多圈 成时间浪费
for(int j=1; j<t;j++ ) //数到要 的那个数的前一个
p=p->next;
number *q = p->next; //要 的数的指针
printf("%d ", q->num); //输出要 的数
p->next = q->next; //要 的数从链表中去掉
free(q);
}
printf("\n");

}
 
0 0