本人计算机刚入门,老师看我们学习编程太慢就布置了几个经典编程任务,限期完成,其中包括约瑟夫环问题。多方复习反复琢磨终于亲自work out,老师说需要free一下内存麻烦看到的朋友指点指点,因为我第一步的数据后面还需要用到,不知道怎么free。
#include<stdio.h>
#include<stdlib.h>
#define N 100 //总人数
#define M 3 //数三次出列
#define LEN sizeof(struct ring)
struct ring
{
int a;
struct ring *next;
};
void main()
{
int i;
struct ring *head;
struct ring *p1, *p2;
p1 = p2 = malloc(LEN);
p1->a = 1;
head = p1;
printf("%d ", p1->a);
for (i = 2; i <= N; i++)
{
p1 = malloc(LEN);
p2->next = p1;
p1->a = i;
p2 = p1;
if (i == N) p2->next = head;
printf("%d ", p1->a);
}
printf("\n");
p1 = head;
int n = 1,count=1;
while (count<N)
{
count++;
for (i = 1; i != M; i++)
{
p2 = p1;
p1 = p1->next;
}
//if (M == 1) head = p1->next;
p2->next = p1->next;
printf("第%d次出列:%d\n", n++, p1->a);
p1 = p1->next;
}
printf("\nwinner is %d\n", p1->a);
}