簡單的約瑟夫環

N個人圍成一圈順序編號,從1號開始按123順序報數,報3者退出圈外,其餘的人再從123開始報數,報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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章