• <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>
            C++中的一粒沙子
            學習C++,做應用開發
            posts - 10,comments - 22,trackbacks - 0
            約瑟夫(josephus)環是這樣的:假設有n個小孩坐成一個環,假如從第一個小孩開始數,如果數到m個小孩,則該小該離開,問最后留下的小孩是第幾個小孩?例如:總共有6個小孩,圍成一圈,從第一個小孩開始,每次數2個小孩,則游戲情況如下:
            ????小孩序號:1,2,3,4,5,6
            ????離開小孩序號:2,4,6,3,1
            最后獲勝小孩序號:5

            ????這樣的問題,我可以先考慮輸入的內容有哪些?輸出內容有哪些?
            ????????要求用戶輸入的內容有:
            ?????????1、是小孩的個數,也就是n的值;
            ?????????2、是離開小孩的間隔是多少?也就是m的值。
            ?????????3、所有小孩的序號要求存在數組或者鏈表中,所以需要定義一個指針,這里我們用數組來存放小孩的序號。
            ????????而要求輸出的內容是:
            ?????????1、離開小孩的序號;
            ?????????2、最后留下小孩的序號;
            所以,根據上面分析輸入輸出參數,我們考慮離開小孩的序號可以直接輸出,這樣可以使函數的復雜性。那么函數定義如下:
            //輸入參數:
            //Childs為指向一個整形指針,指向保存小孩數組的首地址;
            //n為小孩的個數;
            //m為數小孩的個數;
            int?Josephus(int?*Child,int?n,int?m)
            {
            int?i=-1,j=0,k=1;
            //開始數小孩,只到留下一個小孩
            while(1)
            {
            //數m個小孩
            ??for(j=0;j<m;)
            ??
            {
            ???i
            =(i+1)%n;????//取下標加1的模,當i的值在0到n-1之間循環
            ???if(Child[i]!=-1)?//小孩在環中則數數有效;
            ????j++;
            ???
            ??}


            ???
            if(k==n)????????????????????????//如果k==n則表示,此時數組中只留下一個小孩,
            ????break;??????????????????????????//序號為Child[i]中的值,跳出循環;
            ???cout<<Child[i]<<",";??//輸出離開小孩的序號;

            ???Child[i]
            =-1;???????????????//離開的小孩用-1作標記
            ???k=k+1;

            }

            cout
            <<endl;
            return(Child[i]);????//返回最獲勝小孩的序號
            }


            完整的程序,在VC6中調試通過。
            //-----------------------------------------------------------
            #include<iostream.h>
            int?Josephus(int?*Child,int?n,int?m);
            void?main()
            {
            int?*allChild,j,k,l;
            cin
            >>j>>k;

            ??
            if((allChild=?new?int[j])!=NULL)
            ??
            {
            ????
            for(l=0;l<j;l++)
            ????
            {??
            ?????cout
            <<l+1<<",";
            ?????allChild[l]
            =l+1;
            ????}

            ????cout
            <<endl;
            ????cout
            <<Josephus(allChild,j,k);
            ??}

            }


            int?Josephus(int?*Child,int?n,int?m)
            {
            int?i=-1,j=0,k=1;
            while(1)
            {
            ??
            for(j=0;j<m;)
            ??
            {
            ???i
            =(i+1)%n;????
            ???
            if(Child[i]!=-1)?
            ????j
            ++;
            ???
            ??}


            ???
            if(k==n)????????????????????????
            ????
            break;????????????????????????
            ???cout
            <<Child[i]<<",";??

            ???Child[i]
            =-1;?????????
            ???k
            =k+1;

            }

            cout
            <<endl;
            return(Child[i]);????
            }

            posted on 2006-04-29 09:30 炙熱的太陽 閱讀(570) 評論(0)  編輯 收藏 引用
            久久精品成人欧美大片| 人妻无码αv中文字幕久久| 久久e热在这里只有国产中文精品99| 国内精品久久久久国产盗摄| 国产精品久久久久久久app| 久久AV高清无码| 久久人人爽人人爽人人片AV麻豆 | 久久国产免费观看精品3| 国内精品久久久久影院日本| 久久久综合香蕉尹人综合网| 久久久国产乱子伦精品作者| 精品国产婷婷久久久| 99精品国产在热久久无毒不卡| 久久夜色精品国产亚洲av| 久久99精品国产麻豆宅宅| 亚洲精品乱码久久久久久| 青青热久久国产久精品 | 久久精品国产精品亚洲人人| 久久丫精品国产亚洲av不卡| 久久人人爽人人爽人人片AV麻豆| 欧美精品一区二区精品久久| 亚洲精品乱码久久久久久按摩| 久久这里只精品99re66| 久久影视综合亚洲| 久久精品国产99久久久香蕉| 99国产欧美久久久精品蜜芽| 国产精品久久久久国产A级| 狠狠色丁香久久婷婷综合| 亚洲国产日韩欧美综合久久| 欧洲性大片xxxxx久久久| 久久久精品人妻无码专区不卡| 国产成人精品久久综合| 精品久久久久国产免费| 日日狠狠久久偷偷色综合免费| 久久精品综合一区二区三区| 久久久WWW成人免费精品| 婷婷久久综合九色综合绿巨人| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲av成人无码久久精品| 亚洲精品乱码久久久久久中文字幕| 色婷婷狠狠久久综合五月|