国产探花免费观看_亚洲丰满少妇自慰呻吟_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);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 揭东县| 花莲县| 阿克| 霍山县| 湖州市| 白山市| 霍邱县| 临沭县| 台江县| 资源县| 孟连| 辽宁省| 惠水县| 长沙县| 栖霞市| 万源市| 蒲江县| 和田县| 化德县| 监利县| 广昌县| 雅安市| 平度市| 巴里| 高陵县| 邳州市| 西乌珠穆沁旗| 昭平县| 东明县| 中山市| 肇州县| 博爱县| 瑞金市| 西宁市| 从江县| 陈巴尔虎旗| 思南县| 桐梓县| 龙里县| 泸州市| 仁怀市|