有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//建立结构体
struct data
{
int i;
struct data *next;
};
typedef struct data Data;
int main()
{
Data p, *temp, *a;
int i, j;
temp = &p;
temp->next = NULL;
printf("Input a num:\n");
scanf("%d", &i);
for(j = 0; j < i; j++) //用一个for循环插入链表
{
a = (Data *)malloc(sizeof(Data));
memset((void*)a, 0, sizeof(*a));
a -> i = j + 1;
a ->next = temp;
temp -> next = a;
temp = a;
if(j == i - 1) //如果是最后一个数据,next指向第一个节点
{
temp -> next = p.next;
}
}
temp = &p;
j = 0;
while(temp != temp->next)
{
temp = temp->next;
j++;
if(j == 2)
{
a = temp->next;
temp->next = temp->next->next; //重点
free(a);
j = 0;
}
}
printf("%d\n", temp->i);
return 0;
}