C語言版約瑟夫問題算法實(shí)現(xiàn)
1、問題描述:
? ? ? ?有n個(gè)人圍坐一圈,現(xiàn)從第s個(gè)人開始報(bào)數(shù),數(shù)到m的人出列,接著從出列的下一個(gè)人開始重新報(bào)數(shù),數(shù)到m的人又出列.如此下去,直到所有人都出列為止.試設(shè)計(jì)確定他們出列次序序列的程序
2、算法步驟:
????????1、確定存儲結(jié)構(gòu):n個(gè)人圍成一圈,故使用循環(huán)單鏈表來存儲序號
????????2、算法實(shí)現(xiàn):
該問題共n、m、s三個(gè)未知量,所以可以通過三個(gè)循環(huán)來實(shí)現(xiàn),第一個(gè)循環(huán)用來確定最開始第一個(gè)報(bào)數(shù)的人的指針位置(單鏈表的頭節(jié)點(diǎn)指針指向第s個(gè)人),第二個(gè)循環(huán)用來控制輸出序號的次數(shù)(共n次),第三個(gè)循環(huán)用來數(shù)數(shù)(每一次循環(huán)使指針移動m次)
3、實(shí)現(xiàn)源代碼:
# 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("約瑟夫環(huán)問題:\n");
printf("設(shè)有n(編號為“0 1 2 3 .....n-1 n”)個(gè)人圍坐一圈,現(xiàn)從第s個(gè)人開始報(bào)數(shù),數(shù)到m的人出列,\n求最后的出列順序。\n");
printf("請?jiān)O(shè)置n, s, m :\n");
printf("n = ");
scanf("%d", &n);
printf("s = ");
scanf("%d", &s);
printf("m = ");
scanf("%d", &m); //問題引導(dǎo)提示代碼段
PNODE pHead = NULL;
pHead = creat_list(n);
pHead->number = 1; //創(chuàng)建單鏈表
PNODE p = pHead; //定義頭指針
int i,j,k; //定義循環(huán)參數(shù)
for(j = 1; j < s; j++)
{
p = p->pNext;
} //第一個(gè)循環(huán)確定第一個(gè)報(bào)數(shù)的人在循環(huán)單鏈表中的位置
for(i = 1; i <= n; i++) //外部循環(huán)代表遍歷到最后一個(gè)所需要的循環(huán)次數(shù)
{
for(k = 1; k < m; ) //內(nèi)部循環(huán)代表遍歷出列的人
{
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) //單鏈表的創(chuàng)建
{
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;
}
到此這篇關(guān)于C語言版約瑟夫問題算法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C語言約瑟夫問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pipes實(shí)現(xiàn)LeetCode(193.驗(yàn)證電話號碼)
這篇文章主要介紹了Pipes實(shí)現(xiàn)LeetCode(193.驗(yàn)證電話號碼),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
使用C語言實(shí)現(xiàn)繪制立體分離式環(huán)圖
這篇文章主要為大家詳細(xì)介紹了使用C語言實(shí)現(xiàn)繪制立體分離式環(huán)圖的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03

