約瑟夫問題(c)

2024-07-05 12:22

描述約瑟夫問題:有n只猴子,按順時(shí)針方向圍成一圈選大王(編號從1到n),從第1號開始報(bào)數(shù),一直數(shù)到m,數(shù)到m的猴子退出圈外,剩下的猴子再接著從1開始報(bào)數(shù)。就這樣,直到圈內(nèi)只剩下一只猴子時(shí),這個(gè)猴子就是猴王,編程求輸入n,m后,輸出最后猴王的編號。輸入每行是用空格分開的兩個(gè)整數(shù),第一個(gè)是 n, 第二個(gè)是 m ( 0 < m,n <=300)。最后一行是:0 0樣例輸入6 212 48 30 0樣例輸出517
1個(gè)回答

約瑟夫問題是經(jīng)典的算法題,大多教材上都有的,以下是我寫的,供參考:

#include
#define N 30
int yuesefu1(int data[], int sum, int k)
{
? ?int i = 0, j = 0, count = 0;
? ?while(count < sum - 1)
? ?{
? ? ? ?if(data[i] != 0) /*當(dāng)前人在圈子里*/
? ? ? ? ? ?j++;
? ? ? ?if(j == k) /*若該人應(yīng)該退出圈子*/
? ? ? ?{
? ? ? ? ? ?data[i] = 0; /*0表示不在圈子里*/
? ? ? ? ? ?count++;/*退出的人數(shù)加1*/
? ? ? ? ? ?j = 0; /*重新數(shù)數(shù)*/
? ? ? ?}
? ? ? ?i++;/*判斷下一個(gè)人*/
? ? ? ?if(i == sum) /*圍成一圈*/
? ? ? ? ? ?i = 0;
? ?}
? ?for(i = 0; i < sum; i++)
? ? ? ?if(data[i] != 0)
? ? ? ? ? ?return data[i];/*返回最后一個(gè)人的編號*/
}

int main()
{
? ?int data[N], total, k, i;
? ?while(1)
? ?{
? ? ? ?scanf("%d%d", &total, &k);
? ? ? ?if(total == 0 || k == 0)
? ? ? ? ? ?break;
? ? ? ?for(i = 0; i < total; i++)
? ? ? ? ? ?data[i] = i + 1; //初始化
? ? ? ?printf("%d\n", yuesefu1(data, total, k));
? ?}
? ?return 0;
}


相關(guān)問答
約瑟夫的簡介
1個(gè)回答2024-02-09 12:35
公元37生于耶路撒冷,公元100年卒于羅馬。約瑟夫是羅馬帝國時(shí)期以為僧侶出身的猶太歷史學(xué)家,也是一位猶太法利賽教徒(Pharisee)。 約公元64年游歷羅馬,在公元66年猶太起義前夕返回耶路撒冷...
全文
約瑟夫問題:
1個(gè)回答2024-03-18 17:56
約瑟夫環(huán): 約瑟夫環(huán)問題的一種描述是:編號為1.2.3…….n的n個(gè)人按順時(shí)針方向圍坐一圈 ,每人手持一個(gè)密碼(正整數(shù)),開始任意選一個(gè)整數(shù)作為報(bào)數(shù)上限值,從第一 個(gè)人開始順時(shí)針自...
全文
約瑟夫問題
1個(gè)回答2024-06-11 09:12
你的問題是什么?若是編寫程序要說明你要用的語言,以下是C的參考: #include #define N 30 int yuesefu1(int data[],int sum,int k) { ...
全文
約瑟夫問題
1個(gè)回答2024-07-01 22:43
#include #include struct node{ int data; struct node *next; }; int main(){ int i,j,k,m...
全文
約瑟夫問題
1個(gè)回答2024-08-07 02:47
//約瑟夫環(huán): //這并告?zhèn)€程序有點(diǎn)小問題,你自己看看吧,現(xiàn)在沒時(shí)間改了,起始位置有點(diǎn)問題 #include #include int flag; typedef struct node ...
全文
約瑟夫問題
1個(gè)回答2024-07-02 17:23
約瑟夫環(huán): 約瑟夫環(huán)問題的一種描述是:編號為1.2.3…….n的n個(gè)人按順時(shí)針方向圍坐一圈 ,每人手持一個(gè)密碼(正整數(shù)),開始任意選一個(gè)整數(shù)作為報(bào)數(shù)上限值,從第一 個(gè)人開始順時(shí)針自1開始...
全文
約瑟夫斯的著名的約瑟夫斯問題
1個(gè)回答2024-04-21 12:09
據(jù)說著名猶太歷史學(xué)家 Josephus有過以下的故事:在羅馬人占領(lǐng)喬塔帕特後,39 個(gè)猶太人與Josephus及他的朋友躲到一個(gè)洞中罩棚,39個(gè)猶太人決定寧愿死也不要被人抓到,于是決定了一個(gè)自殺方式...
全文
約瑟夫環(huán)
1個(gè)回答2022-10-26 22:26
約瑟夫環(huán)是一個(gè)數(shù)學(xué)的應(yīng)用問題:已知n個(gè)人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報(bào)數(shù),數(shù)到m的那個(gè)人出列;他的下一個(gè)人又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列;依此規(guī)律重...
全文
什么是約瑟夫環(huán)?
1個(gè)回答2022-10-17 18:28
約瑟夫問題的一種描述是:編號為1,2,……,n的n個(gè)人按順時(shí)針方向圍坐一圈,每人持有一個(gè)密碼(正整數(shù))。一開始任選一個(gè)正整數(shù)作為報(bào)數(shù)上限值m,從第一個(gè)人開始按順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)...
全文
約瑟夫·熊彼特的主要作品
1個(gè)回答2024-02-25 13:34
《經(jīng)濟(jì)發(fā)展理論》1911年發(fā)表德文版,1912年英文版問世;這本書是他的成名作 。 《經(jīng)濟(jì)發(fā)展理論》第二版,1926年。有做大幅修改,加上副標(biāo)“企業(yè)者的利潤、資本、信貸、利息及景氣循環(huán)”; 《景氣...
全文
熱門問答