程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 用C++實現約瑟夫環的問題

用C++實現約瑟夫環的問題

編輯:C++入門知識

用C++實現約瑟夫環的問題


約瑟夫問題是個有名的問題:N個人圍成一圈,從第一個開始報數,第M個將被殺掉,最後剩下一個,其余人都將被殺掉。例如N=6,M=5,被殺掉的人的序號為5,4,6,2,3。最後剩下1號。

  假定在圈子裡前K個為好人,後K個為壞人,你的任務是確定這樣的最少M,使得所有的壞人在第一個好人之前被殺掉。

//----數學中有乘法口訣。。那只是工具。我們都很熟悉。

//----C++中有一些基本的程序。也只是工具。我們必須像熟悉乘法口訣一樣去熟悉這些程序。

//----很基礎的一些東西,必須熟練。。。

#include
class link;
using namespace std;
class node{
	friend class link;
public:
	node():next(NULL){}
	node(int value):data(value),next(NULL){}
private:
	int data;
	node *next;
};
class link{
public:
	link(int x,int y,int z):n(x),s(y),m(z){}
	node *createlink()
	{
		node *p,*r;
		node *q;
		r=p=new node;
		for(int i=1;i<=n;++i)
		{
			q=new node;
			q->data=i;
			r->next=q;
			r=q;
		}
		r->next=p->next;
		return p;
	}
	node *jusefu(node *startnode)
	{
		node *p=startnode->next;
		node *q;
			for(int i=1;inext;//讓p指向開始數數的位置,讓q指向需要刪除結點的位置的前一個位置
			q=p->next;
			
			while(q->next!=p)
			{
				q=q->next;
			}
			while(p->next!=p)
			{
				for(int j=1;jnext;
					
				}
				q->next=p->next;
				cout<<"將要刪除的號碼是"<data<next;

			}
			cout<<"留下來的人數的號碼為"<data<>i>>j>>k;
	link linklist(i,j,k);
	node *head=linklist.createlink();
	node *lastnode=linklist.jusefu(head);


	system("pause");
	return 0;
}





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved