题目:13个人围成一圈,从第一个人开始顺序报号1、2、3。凡报到3者退出圈子,找出最后留在圈子中的原来的序号。
我们也可以扩展为n个人围圈的问题,求最后剩下者的序号。
// 循环链表.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#define SIZE 13
#define LEN sizeof(struct person)
struct person
{
int num;
struct person *next;
};
int n=SIZE;//全局变量,表示链表的结点个数;
int main(int argc, char* argv[])
{
struct person circle[SIZE],*head,*temp;
int j=1;
for(int i=0;i<SIZE-1;i++)
{
circle[i].num=i+1;
circle[i].next=&circle[i+1];
}
head=temp=(struct person *)malloc(LEN);
circle[SIZE-1].num=SIZE;
circle[SIZE-1].next=&circle[0];
head=circle;
while(n>1)
{
j++;
temp=head;
head=head->next;
if(j==3)
{
j=0;
n=n-1;
temp->next=head->next;
}
}
printf("%d\n",temp->num);
return 0;
}