1. 程式人生 > >約瑟夫環---單向迴圈連結串列

約瑟夫環---單向迴圈連結串列

題目:實現一個圍圈報數的小函式,7個人圍一圈,從第1個人開始報數,報道3的人結束遊戲,計算出最後剩下一個人的時候,他是第幾個人。
程式碼:
預設從第一個人開始報數

#include<iostream>
using namespace std;
struct Lnode{
    int data;
    Lnode * next;
};
int Cyclecountoff(int people, int num){
    Lnode *head,* pnode, *prepnode=NULL, *curr = NULL;
    head = pnode = new Lnode;
    pnode->data = 1
; pnode->next = pnode; curr = pnode; for (int i = 2; i <= people; i++){ Lnode* tmp = new Lnode; tmp->data = i; tmp->next =curr->next; curr->next = tmp; curr = tmp; } prepnode = curr; while (people--){ for (int
s = 1; s < num; s++){ prepnode = pnode; pnode = pnode->next; } prepnode->next = pnode->next; printf("刪除的第一個元素%d\n", pnode->data); pnode = prepnode->next; } return 0; } int main(){ Cyclecountoff(7,3); system("pause"
); }

設定從第N個人開始報數

#include<iostream>
using namespace std;
struct Lnode{
    int data;
    Lnode * next;
};
int Cyclecountoff(int people, int N, int num){
    Lnode *head,* pnode, *prepnode=NULL, *curr = NULL;
    head = pnode = new Lnode;
    pnode->data = 1;
    pnode->next = pnode;
    curr = pnode;
    for (int i = 2; i <= people; i++){
        Lnode* tmp = new Lnode;
        tmp->data = i;
        tmp->next =curr->next;
        curr->next = tmp;
        curr = tmp;     
    }
    prepnode = curr;
    for (int j = 1; j < N; j++){
        prepnode = pnode;
        pnode = pnode->next;
    }
    while (people--){
        for (int s = 1; s < num; s++){
            prepnode = pnode;
            pnode = pnode->next;
        }
        prepnode->next = pnode->next;
        printf("刪除的第一個元素%d\n", pnode->data);
        pnode = prepnode->next;
    }
    return 0;
}
int main(){
    Cyclecountoff(7,2,3);
    system("pause");

}

相關推薦

單向迴圈連結串列實現

約瑟夫環 已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。 ///迴圈連結串列實現 #include<bits/stdc++.h>

---單向迴圈連結串列

題目:實現一個圍圈報數的小函式,7個人圍一圈,從第1個人開始報數,報道3的人結束遊戲,計算出最後剩下一個人的時候,他是第幾個人。 程式碼: 預設從第一個人開始報數 #include<iost

資料結構——迴圈連結串列

n個數據元素構成一個環,從環中任意位置開始計數,計到m將該元素從表中取出,重複上述過程,直至表中只剩下一個元素。 提示:用一個無頭結點的迴圈單鏈表來實現n個元素的儲存。 樣例: 輸入: 10 3 1 //分別為總數,出列的人數到的數字,開始數的人的編號。 輸出:

C_線性表----問題(迴圈連結串列)

已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部

——靜態迴圈連結串列,動態迴圈連結串列

靜態迴圈連結串列 struct node{ int flag; int next; }arr[11]; #include"stdio.h" #include"stdlib.h" #include"s.h" main(){ int

問題迴圈連結串列實現

//n個人圍圈報數,報m出列,模擬出列的過程 #include <cstdio> #include <cstdlib> typedef struct node { int data; struct node *next; }node; nod

問題(單向迴圈連結串列應用例項)

據說著名猶太曆史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後

BIT2018 DS-SS 問題與迴圈連結串列

約瑟夫問題是一個經典的問題(大一我們講過)。這個問題可以用陣列,也可以用連結串列。作為複習,大家可以試試你自己的演算法。 已知n個人(不妨分別以編號1,2,3,…,n 代表 )圍坐在一張圓桌周圍,從編號為 k 的人開始,從1開始順時針報數1, 2, 3, ...,順時針數到

遊戲->連結串列和順序表實現

#include<cstdio> #include<cstdlib> #include<iostream> using namespace std; typedef struct Staff { int number; struct Staff

問題的連結串列實現

        據說著名猶太曆史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3

(使用C語言單向迴圈連結串列來解決)

題目描述 編號為1,2,…,n的n個人按順時針方向圍坐在一張圓桌周圍,每人持有一個密碼(正整數)。一 開始任選一個正整數m作為報數上限值,從第一個人開始按順時針方向自1開始報數,報到m時停止報數,報m的那 個人出列,將他的密碼作為新的m值,從他順時針方向的下一個人開始重新從1報數,

單向迴圈連結串列模擬

約瑟夫環問題,編好為1,2,3....n的個人按順時針圍坐一圈,每人手持一個密碼。一開始選定m=6,從第一個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下一個人開始重新從1報數,如此下去,直至所有人全部出列為止

單向迴圈連結串列的實現以及的實現

/* * single.h * * Created on: 2012-7-21 * Author: root */ #ifndef SINGLE_H_ #define SINGLE_H_ #include<stdio.h> #includ

單向迴圈連結串列練習-問題

開發十年,就只剩下這套架構體系了! >>>   

迴圈連結串列解決的問題

約瑟夫環問題簡介  約瑟夫環問題的原來描述為,設有編號為1,2,……,n的n(n>0)個人圍成一個圈,從第1個人開始報數,報到m時停止報數,報m的人出圈,再從他的下一個人起重新報數,報到m時停止報數,報m的出圈,……,如此下去,直到所有人全部出圈為止。當任意給定n和m後,設計演算法求n個人出

,魯智深吃饅頭之類的問題總結c++(不用迴圈連結串列

今天看見這一類的題,覺得用迴圈連結串列太麻煩了,就想用某一種方法來代替迴圈連結串列,總結如下。 大致題意 n 個人圍城一圈,從第一個人開始順序編號為1到n。從第1個人從1開始報數,數到3的人出圈。再由下一個人從1開始報數,數到3的人出圈,如此迴圈數下去,直到最後一個人出圈。(題意都差不多

--迴圈連結串列的應用

     通過迴圈連結串列實現約瑟夫環 要求:1)要求設計一個程式模擬次過程,輸入總的人數n,所報的出列的數字k,計數開始的位置p; 程式所能達到的功能:構造連結串列;輸入資料;執行報數;儲存出列人的序號,刪除出列人的資訊以及把指向出列人的指標移到出列人的下一個人,然後重

問題(迴圈連結串列實現)

約瑟夫環問題,n個人圍成一圈,報數到m的人出列,直至n個人全部出列,問出列人的順序 手寫迴圈連結串列模擬實現 #include<stdio.h> #include<stdlib.h> typedef struct SingleNode {

(Josephus)迴圈連結串列解決

關於約瑟夫環的簡單思路技巧 題目要求: 分析題目: 設編號為1,2,3,4…n的n個人順時針坐一圈,約定編號為K的人按順時針從1開始報數,數到m的人出列,他的下一位從1開始 報數… 預設第一次輸入剛開始的序號,之後選擇到誰就用誰的密碼,並把它刪掉。 思路分析:正

迴圈連結串列的遞迴實現

約瑟夫(Joseph)問題的一種描述是:編號為1,2,…,n的n個人按順時針方向圍坐一圈,每人持有一個密碼(正整數)。一開始任選一個正整數作為報數上限值m,從第一個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下一個人開始重新