約瑟夫環(c++版)
問題描述
約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0~n-1,最後 [1] 結果+1即為原問題的解。
程式碼實現
typedef struct Jose{
int num;
Jose* next;
}Jose;
//n個人,數到m停止
void initAndGetJose(int n,int m){
if (m == 1) {
for (int i =1 ; i<=n; i++) {
cout<<i<<" ";
}
}
else{
Jose *first = new Jose;
first->next = first;
first->num =1;
Jose *p =first;
for (int i =2; i<= n; i++) {
Jose *cur = new Jose{i,p->next};
p->next =cur;
p=p->next;
}
//1234 3
//4124 2
//4141 4
//1111 1
int count =n;
Jose* pre = first;
Jose* cur = first->next;
while (count>0) {
for (int i =2; i<m; i++) {
pre=pre->next;
cur=cur->next ;
}
Jose* deleteNode = cur;
cout<<deleteNode->num<<" ";
pre->next = cur->next;
pre = pre->next;
cur = pre->next;
delete deleteNode;
count--;
}
}
}
相關推薦
約瑟夫環(c++版)
問題描述 約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。通
約瑟夫環 C語言 單循環鏈表
node 前驅 輸入 truct sizeof -- 描述 reat 約瑟夫 /*---------約瑟夫環---------*/ /*---------問題描述---------*/ /*編號為1,2,…,n的n個人圍坐一圈,每人持一個密碼(正整數)。 一開始
約瑟夫環經典版--For初學者
這是一個經典的問題,內容是click here。本文章要實現的是:一共n個人,從第k個人開始報數,數到m的淘汰。從他的下一個人接著數,直到剩餘一個人為止。 首先,生成n個人的單鏈表,並從第k個人開始生成。 首尾相接後,如圖: 第一個節點資料元素存的是k,也就是
約瑟夫環加強版--For初學者
經典的約瑟夫問題,click here,本文是加強版的,問題是這樣的,n個人圍成一圈,每一個人手裡拿著一個紙條,每一個紙條上面寫著一個數字(我們假設在1~100之間),首先,給出一個數,從第k個人開始報數,淘汰一個人,淘汰的人開啟手裡的紙條,從他下一個開始報數,
約瑟夫環C語言程式 day1
約瑟夫環問題,n個人圍著一張桌子,從1開始報數,規定報道第k數的人自殺,接著下一給重新開始報數。這裡n=41,k=3。 #include<stdio.h> #include<stdlib.h> typedef int EleType; typedef struct L
約瑟夫環 C語言
#include<stdio.h> int main() { int m,n,i,j,k=0,a[100]={0}; scanf("%d%d",&n,&m); if(n>=1&&m<=1000000) { for(i=0;i&l
約瑟夫環--C語言
約瑟夫(Joseph)問題的一種描述是:編號為1,2,3,…,n的n個人按順時針方向圍坐一圈。每人持有一個密碼(正整數)。一開始任選一個正整數作為報數上限值m,從第一個人開始按順時針方向自1開始順序報數,報到m時停止報數,令其出列,將他的密碼作為新的m值,從他在順時針方向上的下一個人開始
資料結構之約瑟夫環C語言實現
資料結構,是很重要的一門學科,每年考研,資料結構是各大院校必考的科目。當然,資料結構,最令人頭疼的就是演算法設計題了。為了幫助大家理解和掌握資料結構常見的演算法,學長推出系列文章,為大家分享這些重要演算法的C語言完成實現,大家有條件的話,可以在電腦上除錯執行,加深
約瑟夫環——C語言迴圈連結串列模擬
約瑟夫問題已知n個人圍城一週,編號1,2,3,.......,n,從1號開始報數,每隔k個人報到數的人出列。常見解決方法,遞迴或迴圈連結串列模擬迴圈連結串列模擬程式碼#include<stdio.h> //以30個人為例 ,每7個人出列為例 #include
約瑟夫環C++實現很經典的做法
原文地址:http://www.cnblogs.com/hanxi/archive/2012/10/10/2718413.html /* **********************迴圈連結串列解決約瑟夫環問題*********************** * 問題:約瑟
簡單約瑟夫環模板(C++版)
hdu2211 #include <bits/stdc++.h> using namespace std; int t; long long n,k; //函式返回的就是勝利者編號 long long cir(long long n,long long m){ /
用C++實現約瑟夫環的問題
content 人在 -h tel padding next family bsp sun 約瑟夫問題是個有名的問題:N個人圍成一圈。從第一個開始報數,第M個將被殺掉,最後剩下一個,其余人都將被殺掉。比如N=6,M=5。被殺掉的人的序號為5,4,6。2。3。最後剩下1
【c++提問】約瑟夫環問題
ocl wmi lsa rul 2dx hdp and kml eee 家煩堵zx1ul秩枷言http://weibo.com/u/6221316968部坎夢8t970帕糖良http://weibo.com/u/6378557985兜杉稚k9v00劑重凸http://wei
約瑟夫環的c語言實現(代碼已實現)
def 數字 com max std urn img pri c語言實現 # include <stdio.h> #define MAXLEN 20 int front=MAXLEN-1;//隊列初始化 int rear=MAXLEN-1; enqu
約瑟夫環的c語言實現(程式碼已實現)
# include <stdio.h> #define MAXLEN 20 int front=MAXLEN-1;//佇列初始化 int rear=MAXLEN-1; enqueue(int q[],int x) //入隊 { rea
C++第15周專案3 -約瑟夫環
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
約瑟夫環,魯智深吃饅頭之類的問題總結c++(不用迴圈連結串列)
今天看見這一類的題,覺得用迴圈連結串列太麻煩了,就想用某一種方法來代替迴圈連結串列,總結如下。 大致題意 n 個人圍城一圈,從第一個人開始順序編號為1到n。從第1個人從1開始報數,數到3的人出圈。再由下一個人從1開始報數,數到3的人出圈,如此迴圈數下去,直到最後一個人出圈。(題意都差不多
檔案操作版約瑟夫環類問題
題目描述: 本題目儲存的原始檔名應為:prog03.cpp 或 prog03.c 或 prog03.py (按使用程式設計工具確定),該檔案應該儲存在你的學號資料夾中用於提交。 n 個人圍成一圈,從第一個人開始順序編號為1到n。從第1個人從1開始報數,數到3的人出圈。再由下一個人從1開始報數
約瑟夫環(使用C語言單向迴圈連結串列來解決)
題目描述 編號為1,2,…,n的n個人按順時針方向圍坐在一張圓桌周圍,每人持有一個密碼(正整數)。一 開始任選一個正整數m作為報數上限值,從第一個人開始按順時針方向自1開始報數,報到m時停止報數,報m的那 個人出列,將他的密碼作為新的m值,從他順時針方向的下一個人開始重新從1報數,
(演算法)C語言模擬約瑟夫環問題
約瑟夫環問題描述 m個人圍坐一圈,每人持有一個數字,從第一個人開始從1報數,報到n(第一輪n任意給定)的人出圈,將n改為這個出圈的人所持有的數字,下個人開始從1報數,繼續報到n的人出列;依次類推直到所有