N個人圍成一圈順序編號,從1號開始按1、2、3順序報數,報3者退出圈外,其餘的人再從1、2、3開始報數,報3的人再退出圈外,依次類推。請按退出順序輸出每個退出人的原序號。
思路:建立單循環鏈表,用兩個指針表示,依次修改指針,刪除報到3的指針.....
#include <iostream>
using namespace std;
typedef struct node
{
int num;
struct node*next;
}LNode;
int main()
{
LNode *head,*p,*q;
int n;
cout<<"請輸入總人數:";
cin>>n;
p=(LNode*)malloc(sizeof(LNode));//申請頭結點
p->num=1;
p->next=NULL;
head=p;
for(int i=1;i<n;++i)
{
p->next=(LNode*)malloc(sizeof(LNode));
p=p->next;
p->num=i+1;
}
p->next=head;
p=head;
cout<<"輸出序列:"<<endl;
while(p->next!=p)
{
q=p->next;
p=q->next;
q->next=p->next;
cout<<p->num<<" ";
delete p;
p=q->next;
}
cout<<p->num<<endl;
delete p;
return 0;
}