溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現C語言版約瑟夫問題算法

發布時間:2021-12-31 14:12:00 來源:億速云 閱讀:226 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“如何實現C語言版約瑟夫問題算法”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何實現C語言版約瑟夫問題算法”這篇文章吧。

1、問題描述:

       有n個人圍坐一圈,現從第s個人開始報數,數到m的人出列,接著從出列的下一個人開始重新報數,數到m的人又出列.如此下去,直到所有人都出列為止.試設計確定他們出列次序序列的程序

2、算法步驟:

        1、確定存儲結構:n個人圍成一圈,故使用循環單鏈表來存儲序號

        2、算法實現:

該問題共n、m、s三個未知量,所以可以通過三個循環來實現,第一個循環用來確定最開始第一個報數的人的指針位置(單鏈表的頭節點指針指向第s個人),第二個循環用來控制輸出序號的次數(共n次),第三個循環用來數數(每一次循環使指針移動m次)

3、實現源代碼:

# include <stdio.h>
# include <malloc.h>
 
typedef struct Node
{
	int number;
	struct Node * pNext;
}NODE, *PNODE;
 
PNODE creat_list(int n);
 
int main (void)
{
	int n,m,s;
	printf("約瑟夫環問題:\n");
	printf("設有n(編號為“0 1 2 3 .....n-1 n”)個人圍坐一圈,現從第s個人開始報數,數到m的人出列,\n求最后的出列順序。\n");
	printf("請設置n, s, m :\n");
	printf("n = ");
	scanf("%d", &n);
	printf("s = ");
	scanf("%d", &s);
	printf("m = ");
	scanf("%d", &m);                    //問題引導提示代碼段
 
 
	PNODE pHead = NULL;
	pHead = creat_list(n); 
    pHead->number = 1;                   //創建單鏈表
 
	PNODE p = pHead;                       //定義頭指針
	int i,j,k;                            //定義循環參數
	for(j = 1; j < s; j++)
		{
			p = p->pNext;
		}                                //第一個循環確定第一個報數的人在循環單鏈表中的位置  
 
	for(i = 1; i <= n; i++)              //外部循環代表遍歷到最后一個所需要的循環次數
	{
		for(k = 1; k < m; )              //內部循環代表遍歷出列的人
		{
			if(p -> pNext -> number != 0)
			{
				p = p -> pNext;
				k++;
			}
			else
			{
				p = p -> pNext;
			}
		}
		printf("%d  ",p -> number);
		p -> number = 0;
	    do
		{
		    p = p -> pNext;
		}while(p -> number == 0); 
	}
	printf("\n");
	
	return 0;
}
PNODE creat_list(int n)                        //單鏈表的創建
{
	PNODE pHead = (PNODE)malloc(sizeof(NODE));
    PNODE pTail = pHead;
	int i;
    for(i = 2; i <= n; i++)
	{
		PNODE pNew = (PNODE)malloc(sizeof(NODE));
		pNew->number = i;
		pTail->pNext = pNew;
		pNew->pNext = pHead;
		pTail = pNew;
	}
	return pHead;
}

以上是“如何實現C語言版約瑟夫問題算法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女