1. 程式人生 > >約瑟夫環(c++版)

約瑟夫環(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的人出列;依次類推直到所有