• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            glxhyt

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              15 隨筆 :: 0 文章 :: 4 評(píng)論 :: 0 Trackbacks
             

            著名的Josephus問題

              據(jù)說著名猶太歷史學(xué)家 Josephus有過以下的故事:在羅馬人占領(lǐng)喬塔帕特後,39 個(gè)猶太人與Josephus及他的朋友躲到一個(gè)洞中,39個(gè)猶太人決定寧愿死也不要被人抓到,于是決定了一個(gè)自殺方式,41個(gè)人排成一個(gè)圓圈,由第1個(gè)人開始報(bào)數(shù),每報(bào)數(shù)到第3人該人就必須自殺,然后再由下一個(gè)重新報(bào)數(shù),直到所有人都自殺身亡為止。

              然而Josephus 和他的朋友并不想遵從,Josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個(gè)與第31個(gè)位置,于是逃過了這場(chǎng)死亡游戲。

              1#ifndef _RING_H_
              2#define _RING_G_
              3#include <iostream>
              4
              5using namespace std;
              6
              7typedef struct tag_Student
              8{
              9    int iNumber;
             10    tag_Student *pNext;
             11    tag_Student():pNext(NULL){}
             12    
             13
             14}
            st_Student;
             15class CRing
             16{
             17private:
             18    int m_NumCount;
             19    int m_Interval;
             20
             21public:
             22    CRing(int NumCount, int Interval);
             23    ~CRing();
             24
             25    void FindOutOfChidren(st_Student * p);
             26
             27    void DeleteChidren();
             28    void ShowLoseChidren();
             29    void ShowWinChidern();
             30
             31    void PrintChidren(st_Student *Head);
             32
             33public:
             34    st_Student *pCurrent;
             35    st_Student *pDelete;
             36
             37    st_Student *pHead;
             38
             39}
            ;
             40
             41#endif
             42
             43
             44#ifndef _JOSEPHUS_H_
             45#define _JOSEPHUS_H_
             46
             47
             48class Josephus
             49{
             50private:
             51    int m_iInterval;
             52    int m_iNumCount;
             53
             54public:
             55    Josephus(int Interval, int NumCount);
             56    
             57    void Inital();
             58
             59}
            ;
             60
             61#endif
             62
             63
             64#include "stdafx.h"
             65
             66#include "ring.h"
             67
             68CRing::CRing(int NumCount , int Interval)
             69{
             70    /*
             71    st_Student *Temp;
             72    m_NumCount = NumCount;
             73    m_Interval = Interval;
             74    pHead = new st_Student[NumCount];
             75
             76    Temp = pHead;
             77   
             78    for(int i = 1; i <= NumCount; ++i)
             79    {
             80      Temp->iNumber = i;
             81      Temp->pNext = pHead +( i % NumCount);
             82      Temp = Temp->pNext;
             83    }
             84
             85    Temp = pHead;
             86    pCurrent = Temp;
             87    */

             88
             89    m_NumCount = NumCount;
             90    m_Interval = Interval;
             91    st_Student *t, *q;
             92    pHead = new st_Student;
             93    t = pHead;
             94    for(int j = 1; j <= NumCount; ++j)
             95    {
             96
             97        //pHead = new st_Student;
             98        t->iNumber = j;
             99        t->pNext = new st_Student;
            100        
            101        q = t;//關(guān)鍵的一部是為了記錄最后一個(gè)節(jié)點(diǎn),連成一個(gè)串
            102
            103        t =t->pNext;
            104    }

            105
            106    q->pNext = pHead;
            107
            108    pCurrent = pHead;
            109
            110
            111}

            112void CRing::FindOutOfChidren(st_Student * p)
            113{
            114
            115    for(int i=0 ; i < m_Interval; ++i)
            116    {
            117            pCurrent = p;
            118            p = p->pNext;
            119
            120    }

            121
            122}

            123
            124void CRing::DeleteChidren()
            125{
            126    pDelete = pCurrent->pNext;
            127
            128    pCurrent->pNext = pCurrent->pNext->pNext;
            129    pCurrent = pCurrent->pNext;
            130
            131}

            132
            133void CRing::PrintChidren(st_Student *Head)
            134{
            135    for(int i = 0; i < m_NumCount; ++i)
            136    {
            137        cout<<"chideren Number"<<Head->iNumber<<" ";
            138        Head = Head->pNext;
            139    }

            140
            141}

            142
            143void CRing::ShowLoseChidren()
            144{
            145    cout<<"Lose chidren"<<pDelete->iNumber<<endl;
            146}

            147
            148CRing::~CRing()
            149{
            150    delete [] pHead;
            151}

            152
            153
            154#include "stdafx.h"
            155#include "ring.h"
            156#include "Josephus.h"
            157
            158Josephus::Josephus(int Interval, int NumCount)
            159{
            160    m_iInterval = Interval;
            161    m_iNumCount = NumCount;
            162
            163}

            164
            165void Josephus::Inital()
            166{
            167
            168
            169    CRing cr(m_iNumCount, m_iInterval);
            170
            171    //cr.PrintChidren(cr.pHead);
            172    for(int j = 0; j < m_iNumCount; ++j)
            173    {
            174
            175        cr.FindOutOfChidren(cr.pCurrent);
            176
            177        cr.DeleteChidren();
            178        cr.ShowLoseChidren();
            179
            180
            181    }

            182}

            183
            184
            185
            186// JosephusQuestion.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
            187//
            188
            189#include "stdafx.h"
            190#include "Josephus.h"
            191
            192int _tmain(int argc, _TCHAR* argv[])
            193{
            194
            195    Josephus J(241);
            196    J.Inital();
            197    return 0;
            198}

            199
            posted on 2010-08-11 19:39 郭龍 閱讀(383) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久久久亚洲AV无码专区桃色| 久久无码AV中文出轨人妻| 精品多毛少妇人妻AV免费久久| 性色欲网站人妻丰满中文久久不卡| 人妻无码αv中文字幕久久琪琪布| 国产美女久久久| 亚洲精品乱码久久久久久不卡| 91久久精品91久久性色| 亚洲欧美成人久久综合中文网| 国内精品久久久久影院一蜜桃| 久久香蕉国产线看观看猫咪?v| 久久亚洲精品成人AV| 久久精品国产亚洲av麻豆图片 | 伊人久久大香线蕉综合热线| 精品久久久久久中文字幕| 一级女性全黄久久生活片免费 | 7国产欧美日韩综合天堂中文久久久久 | 中文字幕日本人妻久久久免费 | 色综合久久88色综合天天| 久久久国产打桩机| 久久久精品日本一区二区三区| 久久99精品综合国产首页| 午夜人妻久久久久久久久| 亚洲欧美一区二区三区久久| 天天久久狠狠色综合| 青青草原综合久久大伊人精品| 少妇久久久久久久久久| 国内精品久久久久影院薰衣草 | 久久精品成人一区二区三区| 国产午夜精品理论片久久影视| 少妇内射兰兰久久| 人妻无码αv中文字幕久久 | 久久夜色精品国产亚洲av| 久久精品国产只有精品66| 久久www免费人成看国产片| 久久精品中文字幕有码| 久久久久久国产精品无码下载 | 伊人久久大香线蕉综合网站| 久久人人爽人人人人爽AV | 色婷婷综合久久久久中文一区二区 | 亚洲中文字幕伊人久久无码|