您的位置:首页 > 编程语言 > C语言/C++

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

2014-03-25 21:52 471 查看

#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");

}


转发至微博


转发至微博
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐