国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c++循環列表解決約瑟夫環問題

2019-11-08 18:25:40
字體:
來源:轉載
供稿:網友
約瑟夫環問題:
已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。編程思路:先建立一個循環鏈表,找到第一個報數的人,依次列出出列人的序號。
#include <iostream>using namespace std;struct Node{	int id;	Node *next;	Node(int i) { id = i; next = NULL; }};struct LinkedList{	Node *head;	int length;	LinkedList(){ head = NULL; length = 0; }};/************************************************************************//*  n 為總人數                                                          *//*  k 為第一個開始報數的人                                              *//*  m 為出列者喊到的數                                                   *//************************************************************************/void Josephus(int n, int k, int m){	if (n<0||k<0||m<0)	{		cout << "三個輸入參數必須都為正整數" << endl;		return;	}	if (n < k)	{		cout << "起始序號必須大于總人數" << endl;		return;	}	//先建立循環鏈表	LinkedList *list = new LinkedList();	Node *node = list->head;	Node *pnode = list->head;  //先驅節點	for (int i = 1; i <= n; i++)	{		if (i == 1)		{			node = new Node(i);			list->head = node;			list->length++;			node->next = node;		}		else		{			pnode = node;			node = new Node(i);			pnode->next = node;			node->next = list->head;			list->length++;		}	}	//打印下,驗證現有鏈表信息正確	Node *temp = list->head;	for (int i = 1; i <= n; i++)	{		cout << temp->id << ends;		temp = temp->next;	}	cout << endl;		node = list->head;	pnode = list->head;	//找到第一個開始報數的人	while (--k)	{		pnode = node;		node = node->next;	}	cout << "第一個開始報數的人的id:" << node->id << endl;	int j = m - 1;	cout << "出列人的id依次是:" << ends;	while (n--)	{		for (j = m-1; j > 0; j--)		{			pnode = node;			node = node->next;		}			cout << node->id << " " << ends;			pnode->next = node->next;			node = pnode->next;	}}void main(){	Josephus(5, 3, 1);	cout << endl;	Josephus(5, 3, 2);	cout << endl;	Josephus(9, 2, 3);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 土默特右旗| 青冈县| 奇台县| 景谷| 庆城县| 乐至县| 莎车县| 美姑县| 申扎县| 昆山市| 玉环县| 章丘市| 九龙坡区| 三原县| 郑州市| 孟州市| 鄂托克旗| 抚松县| 沙河市| 邵东县| 武清区| 韶关市| 额尔古纳市| 冕宁县| 武冈市| 莱州市| 连南| 桦南县| 阳春市| 蓝田县| 称多县| 四会市| 镶黄旗| 神木县| 绥宁县| 利川市| 河北区| 娱乐| 旅游| 水城县| 乐安县|