第639集約瑟夫保羅
約瑟夫的簡介
公元37生于耶路撒冷,公元100年卒于羅馬。約瑟夫是羅馬帝國時期以為僧侶出身的猶太歷史學(xué)家,也是一位猶太法利賽教徒(Pharisee)。 約公元64年游歷羅馬,在公元66年猶太起義前夕返回耶路撒冷。被俘后,他預(yù)言韋帕薌將取得帝位,隨即得到赦免。 公元70年耶路撒冷陷落后,他在羅馬定居并獲得羅馬公民權(quán)、一座房舍和養(yǎng)老金。 約瑟夫著有七卷本的《猶太戰(zhàn)爭》(Bellum Iudaicum),最初以阿剌美語(Aramaic)寫成,其他作品均以希臘語寫成,其中包括《猶太古史》(Antiquitates Iudaicae)——從創(chuàng)世到公元66年的猶太歷史,約公元94年以20卷本刊布。他的《自傳》(Vita)是對猶太起義由他發(fā)起和組織的說法的回復(fù)。
約瑟夫問題:
約瑟夫環(huán): 約瑟夫環(huán)問題的一種描述是:編號為1.2.3…….n的n個人按順時針方向圍坐一圈 ,每人手持一個密碼(正整數(shù)),開始任意選一個整數(shù)作為報數(shù)上限值,從第一 個人開始順時針自1開始順序報數(shù),報到m時停止報數(shù)。報m的人出列,將他的密 碼作為新的m值,從他順時針下一個人開始重新從1開始報數(shù),如此下去直到所有 的人全部都出列為止。試設(shè)計程序?qū)崿F(xiàn)。 要求:利用循環(huán)鏈表存儲結(jié)構(gòu)模擬此過程,按照出列的順序打印各人的編號。 測試數(shù)據(jù):m的值初始為20:密碼3 ,1,7,2,4,8,4。 正確的結(jié)果:6,1,4,7,2,3,5。 提示:程序運(yùn)行后首先要求用戶指定初始報數(shù)上限。然后讀取各人的密碼。設(shè) nnext=p; p->num=i; p->code=key; } p->next=head->next; p=head; head=head->next; free(p); p=head; do { printf("\nPerson%d Code:%d",p->num,p->code); /*輸出鏈表*/ p=p->next; }while(p!=head); printf("\nPlease enter your first key:"); /*輸入第一個數(shù)*/ scanf("%d",&key); do { j=1; /*j為記數(shù)數(shù)*/ p=head; while(jnext; j++; } i=p->num; key=p->code; printf("\nThe out of the num:"); printf("Person%d",i); s->next=p->next; head=p->next; /*重新定義head,下次循環(huán)的開始結(jié)點(diǎn)*/ free(p); n--; /*每循環(huán)一次人是減1*/ }while(n>0); getch(); }
約瑟夫問題
你的問題是什么?若是編寫程序要說明你要用的語言,以下是C的參考: #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++;/*判斷下一個人*/ ? ? if(i==sum)/*圍成一圈*/ ? ? ? ? i=0; ? } ? for(i=0;i<sum;i++) ? ? ?if(data[i]!=0) ? ? ? ? ?return data[i];/*返回最后一個人的編號*/ } int main() { ? int data[N]; ? int i,n,m; ? printf("請輸入總數(shù):\n"); ? scanf("%d",&n); ? for(i=0;i<n;i++) ? ? data[i]=i+1; ? printf("請輸入報數(shù):\n"); ? scanf("%d",&m); ? printf("最后的人為: %d\n",yuesefu1(data,n,m)); ? return 0; }
約瑟夫問題
#include #include struct node{ int data; struct node *next; }; int main(){ int i,j,k,m,n; struct node *head,*p,*q; scanf("%d%d",&n,&m); p=(struct node*)malloc(sizeof(struct node)); p->data=1;p->next=p; head=p; for(i=2;idata=i;q->next=head; p->next=q; p=q; } k=1;p=head; while(p->next!=p){ if(k+1==m){ p->next=p->next->next; k=1; p=p->next; }else{ k++; p=p->next; } } printf("%d\n",p->data); system("pause"); return 0; }
約瑟夫問題
//約瑟夫環(huán): //這并告?zhèn)€程序有點(diǎn)小問題,你自己看看吧,現(xiàn)在沒時間改了,起始位置有點(diǎn)問題 #include #include int flag; typedef struct node {int data; struct node *next; }LNode,* Linklist; Linklist CreatFromHead() //鏈表的初始化 { Linklist L=NULL,s; LNode *r=NULL; int x=1; s=(Linklist)malloc(sizeof(LNode)); L = s; r= L; printf("請輸入請廳叢輸入報數(shù)的人數(shù)"); scanf_s("%d",&flag); while(x!=flag+1) {s=(Linklist)malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; x++; } s->next=L; if(r!=NULL) r->next=NULL; return L; } Linklist Getlist(Linklist L,int i) //鏈表的查找函數(shù) {Linklist p; int j; p=L;j=0; while(p->next!=NULL&&jnext; j++; } if(i==j)return p; else return NULL; } Linklist treat(Linklist L,Linklist s,int k,int i) //約瑟夫環(huán)算法 { int j=0; if(s==NULL) { s=L->扮蔽櫻next; } while(jnext; j++; if(s==NULL) { s=L->next; } } return s; } int Del_Linklist(Linklist L,Linklist p) //鏈表結(jié)點(diǎn)刪除函數(shù) {Linklist s; s=L; while((s->next->data != p->data)) { s=s->next; } s->next=s->next->next; free(p); return 1; } void main() //主函數(shù) {Linklist L; Linklist p,s; int i,k,m,n; L=CreatFromHead(); printf("請輸入查找的元素位置"); scanf_s("%d",&i); printf("請輸入相隔的位置:"); scanf_s("%d",&k); m=0; s=Getlist(L,i); printf("."); while(mdata); s=p->next; n=Del_Linklist(L,p); m++; } }
約瑟夫問題
約瑟夫環(huán): 約瑟夫環(huán)問題的一種描述是:編號為1.2.3…….n的n個人按順時針方向圍坐一圈 ,每人手持一個密碼(正整數(shù)),開始任意選一個整數(shù)作為報數(shù)上限值,從第一 個人開始順時針自1開始順序報數(shù),報到m時停止報數(shù)。報m的人出列,將他的密 碼作為新的m值,從他順時針下一個人開始重新從1開始報數(shù),如此下去直到所有 的人全部都出列為止。試設(shè)計程序?qū)崿F(xiàn)。 要求:利用循環(huán)鏈表存儲結(jié)構(gòu)模擬此過程,按照出列的順序打印各人的編號。 測試數(shù)據(jù):m的值初始為20:密碼3,1,7,2,4,8,4。 正確的結(jié)果:6,1,4,7,2,3,5。 提示:程序運(yùn)行后首先要求用戶指定初始報數(shù)上限。然后讀取各人的密碼。設(shè) nnext=p; p->num=i; p->code=key; } p->next=head->next; p=head; head=head->next; free(p); p=head; do { printf(" Person%dCode:%d",p->num,p->code);/*輸出鏈表*/ p=p->next; }while(p!=head); printf(" Pleaseenteryourfirstkey:");/*輸入第一個數(shù)*/ scanf("%d",&key); do { j=1;/*j為記數(shù)數(shù)*/ p=head; while(jnext; j++; } i=p->num; key=p->code; printf(" Theoutofthenum:"); printf("Person%d",i); s->next=p->next; head=p->next;/*重新定義head,下次循環(huán)的開始結(jié)點(diǎn)*/ free(p); n--;/*每循環(huán)一次人是減1*/ }while(n>0); getch(); }
約瑟夫斯的著名的約瑟夫斯問題
據(jù)說著名猶太歷史學(xué)家 Josephus有過以下的故事:在羅馬人占領(lǐng)喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中罩棚,39個猶太人決定寧愿死也不要被人抓到,于是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數(shù),每報數(shù)到第3人該人就必須自殺,然后再由下一個重新報數(shù),直到所有人都自殺身亡為止。 然而Josephus 和他的朋友并不想遵從,Josephus要他的朋友先假裝遵從,他將朋友與自局悶冊己安排在第16個與第31個位置,于是逃過了這場死亡游戲。 解法 約瑟夫問題可用代數(shù)分析來求解,將這個問題擴(kuò)大好了,假設(shè)現(xiàn)在您與m個朋友不幸參與了這個游戲,您要如何保護(hù)您的朋友?只要畫兩個圓圈就可以讓自己與朋友免于死亡游戲,這兩個圓內(nèi)圈是排列順序桐宏,而外圈是自殺順序,如下圖所示:
帝國的毀滅中 保羅.約瑟夫.戈培爾 的扮演者是誰?
Ulrich Matthes
約瑟夫環(huán)
約瑟夫環(huán)是一個數(shù)學(xué)的應(yīng)用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數(shù),數(shù)到m的那個人出列;他的下一個人又從1開始報數(shù),數(shù)到m的那個人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。 鏈表方法:這個就是約瑟夫環(huán)問題的實(shí)際場景,有一種是要通過輸入n,m,k三個正整數(shù),來求出列的序列。這個問題采用的是典型的循環(huán)鏈表的數(shù)據(jù)結(jié)構(gòu),就是將一個鏈表的尾元素指針指向隊(duì)首元素。 p->link=head 解決問題的核心步驟:(程序的基本算法) 1.建立一個具有n個鏈結(jié)點(diǎn),無頭結(jié)點(diǎn)的循環(huán)鏈表; 2.確定第1個報數(shù)人的位置; 3.不斷地從鏈表中刪除鏈結(jié)點(diǎn),直到鏈表為空。 void JOSEPHUS(int n,int k,int m) //n為總?cè)藬?shù),k為第一個開始報數(shù)的人,m為出列者喊到的數(shù) { /* p為當(dāng)前結(jié)點(diǎn) r為輔助結(jié)點(diǎn),指向p的前驅(qū)結(jié)點(diǎn) list為頭節(jié)點(diǎn)*/ LinkList p,r,list; /*建立循環(huán)鏈表*/ for(int i=0;idata=i; if(list==NULL) list=p; else r->link=p; r=p; } p->link=list; /*使鏈表循環(huán)起來*/ p=list; /*使p指向頭節(jié)點(diǎn)*/ /*把當(dāng)前指針移動到第一個報數(shù)的人*/ for(i=0;ilink; } /*循環(huán)地刪除隊(duì)列結(jié)點(diǎn)*/ while(p->link!=p) { for(i=0;ilink; } r->link=p->link; printf("被刪除的元素:%4d ",p->data); free(p); p=r->link; } printf("\n最后被刪除的元素是:%4d",P->data); }
什么是約瑟夫環(huán)?
約瑟夫問題的一種描述是:編號為1,2,……,n的n個人按順時針方向圍坐一圈,每人持有一個密碼(正整數(shù))。一開始任選一個正整數(shù)作為報數(shù)上限值m,從第一個人開始按順時針方向自1開始順序報數(shù),報到m時停止報數(shù)。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下一個人開始重新從1報數(shù),如此下去,直至所有人全部出列為止。試設(shè)計一個程序求出出列順序?;疽? 利用單向循環(huán)鏈表存儲結(jié)構(gòu)模擬此過程,按照出列的順序印出各人的編號。實(shí)現(xiàn)提示 程序運(yùn)行后,首先要求用戶指定初始報數(shù)上限值,然后讀取各人的密碼??稍O(shè)n≤30。此題所用的循環(huán)鏈表中不需要“頭結(jié)點(diǎn)”,請注意空表和非空表的界限。
- 第640集菲兒新蜂中文1.5萬12:29
- 第518集 用保羅的方式打保羅驟雨驚弦2.1萬13:13
- 第641集直率的約瑟夫新蜂中文1.5萬12:17
- 第246集 約瑟夫離開中國西紅柿有聲8.9萬09:17
- 第238集 陪約瑟夫去西班牙西紅柿有聲9.1萬08:40
- 2157、保羅樹小雪老師講故事486707:17
- 2162、保羅樹小雪老師講故事667207:30
- 《約瑟夫有件舊外套》丸子媽媽親子頻道2.5萬02:57
- 第234集 約瑟夫竟是來求婚的西紅柿有聲9.5萬08:57
- 森林中的圣者約瑟夫妄想書房兒童故事機(jī)12.1萬13:16
- 可憐的保羅呆小圈171101:00
- 第10章 保羅Kevin的故事集70萬08:25
- 霸權(quán)的興衰-約瑟夫·奈如夢2017847819:43
- 19.斯卡保羅集市小龍女9946604:52
- 1586-貴族保羅果維聽書858313:24
- 第270集 龍炎,約瑟夫再次施援手西紅柿有聲7.8萬09:02
- 第222集 約瑟夫來到吸血鬼古堡西紅柿有聲9.7萬08:48
- 1970 森林中的圣者約瑟夫小啊俏034513:16
- 60約瑟夫斯:革命倒計時亦湄848707:51
- 約瑟夫有件舊外套-飛飛姐姐飛飛姐姐說故事725505:13
- 23.保羅的夢想人文讀書聲3.2萬24:58
- 7.保羅·米勒的成功故事 (美國)保羅·米勒財務(wù)自由歐爸8768:18
- 523 精英:猶太人約瑟夫斯濤哥說歷史55809:58
- 睡前繪本:約瑟夫有件舊外套火火兔兒童FM2.8萬02:41
- 【第24集】保羅船長的烏鴉嘴:求求你不要說話了保羅船長!神燈童話11.5萬05:47
- 第711集 瓜哥退役,保羅退役驟雨驚弦1.6萬12:23
- 秘密使命 第728集 約瑟夫的算計中廣影音954711:58
- 苦行記 第02集 到達(dá)圣約瑟夫世界名著100部7404:46
- 約瑟夫有件舊外套(民謠故事)經(jīng)典名著繪本童話3.3萬04:04
- 第236集 很矛盾,約瑟夫的淚竟讓他心痛西紅柿有聲9.2萬08:46
- 第0914集-誠實(shí)可靠的保羅司南時代912617:21
- 62約瑟夫斯的預(yù)言:趕騾人做皇帝亦湄744403:04