約瑟夫問(wèn)題的Python和C++求解方法
么是約瑟夫問(wèn)題?
約瑟夫問(wèn)題是一個(gè)有趣的數(shù)學(xué)游戲,游戲規(guī)則如下:
1、N個(gè)人圍成一個(gè)圈,編號(hào)從1開(kāi)始,依次到N。
2、編號(hào)為M的游戲參與者開(kāi)始報(bào)數(shù),報(bào)數(shù)從1開(kāi)始,后面的人報(bào)數(shù)接龍,直到K為止,報(bào)數(shù)為K的人將出局。
3、出局者的下一個(gè)玩家接著從1開(kāi)始報(bào)數(shù),如此循環(huán),直到剩下一個(gè)玩家時(shí)游戲結(jié)束,這個(gè)玩家就是游戲獲勝者。
那么問(wèn)題來(lái)了,哪個(gè)編號(hào)是游戲獲勝者呢?
下面通過(guò)簡(jiǎn)單的幾行python代碼來(lái)解決這個(gè)問(wèn)題:
#!/usr/bin/env python
# Joseph Problem
def joseph(total, begins, count):
queue = range(1, total + 1)
death = (begins + count - 2) % len(queue)
for times in range(total - 1):
print 'out: ', queue[death]
del queue[death]
death = (death + count -1) % len(queue)
print 'survivor: ', queue[0]
joseph()函數(shù)中,參數(shù)total即上面提到的N,begins即M,count及K,每次循環(huán)報(bào)數(shù)out一個(gè)編號(hào),最后剩下的survivor便是游戲獲勝者。
而C++的通常實(shí)現(xiàn)方法如下:
#include <iostream>
using namespace std;
void main()
{
int N=0,C=0;
cout<<"Please enter the number of people:N=";
cin>>N;
cout<<"Please enter:C=";
cin>>C;
int i=0,j=0,n=N,s=0;
int *a=new int [N];
for (i=0;i<N;i++)
{
a[i]=1;
}
while(0!=n)
{
s+=a[j];
if(C==s)
{
a[j]=0;
s=0;
--n;
if(0!=n)
{
cout<<j+1<<"->";
}
else
{
cout<<j+1<<endl;
}
}
j=(j+1)%N;
}
delete []a;
}
這是C++語(yǔ)言常見(jiàn)的機(jī)試題目,以下程序?qū)崿F(xiàn)從控制臺(tái)輸入人數(shù)N,C并將剔除出隊(duì)列的人員編號(hào)按順序輸出到控制臺(tái)上。
- C++循環(huán)鏈表之約瑟夫環(huán)的實(shí)現(xiàn)方法
- C++ 約瑟夫環(huán)的實(shí)例代碼
- C++ 中循環(huán)鏈表和約瑟夫環(huán)
- C++ 中約瑟夫環(huán)替換計(jì)數(shù)器m(數(shù)組解決)
- 詳解基于C++實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題的三種解法
- 詳解約瑟夫環(huán)問(wèn)題及其相關(guān)的C語(yǔ)言算法實(shí)現(xiàn)
- 約瑟夫環(huán)問(wèn)題(數(shù)組法)c語(yǔ)言實(shí)現(xiàn)
- C語(yǔ)言基于循環(huán)鏈表解決約瑟夫環(huán)問(wèn)題的方法示例
- C語(yǔ)言約瑟夫環(huán)的實(shí)現(xiàn)
- C/C++經(jīng)典算法之約瑟夫問(wèn)題詳解
相關(guān)文章
Selenium使用Chrome模擬手機(jī)瀏覽器方法解析
這篇文章主要介紹了Selenium使用Chrome模擬手機(jī)瀏覽器方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
一些讓Python代碼簡(jiǎn)潔的實(shí)用技巧總結(jié)
隨著項(xiàng)目代碼行數(shù)的增加,不可避免的遇到軟件架構(gòu)腐敗的問(wèn)題,所以如何寫(xiě)出簡(jiǎn)潔的代碼至關(guān)重要,這篇文章主要給大家介紹了一些讓Python代碼簡(jiǎn)潔的實(shí)用技巧,需要的朋友可以參考下2021-08-08
Python正則表達(dá)式re.compile()和re.findall()詳解
re?模塊提供了不少有用的函數(shù),用以匹配字符串,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式re.compile()和re.findall()的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
anaconda安裝后打不開(kāi)解決方式(親測(cè)有效)
Anaconda是一個(gè)和Canopy類(lèi)似的科學(xué)計(jì)算環(huán)境,但用起來(lái)更加方便,下面這篇文章主要給大家介紹了關(guān)于anaconda安裝后打不開(kāi)解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
python實(shí)現(xiàn)rar解壓和壓縮的方法(附源碼)
數(shù)據(jù)量現(xiàn)在越來(lái)越大,壓縮文件在日常生活中很常用,這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)rar解壓和壓縮的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
python+matplotlib繪制簡(jiǎn)單的海豚(頂點(diǎn)和節(jié)點(diǎn)的操作)
這篇文章主要介紹了python+matplotlib繪制簡(jiǎn)單的海豚(頂點(diǎn)和節(jié)點(diǎn)的操作),具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01

