約瑟夫問題的Python和C++求解方法
么是約瑟夫問題?
約瑟夫問題是一個有趣的數(shù)學(xué)游戲,游戲規(guī)則如下:
1、N個人圍成一個圈,編號從1開始,依次到N。
2、編號為M的游戲參與者開始報數(shù),報數(shù)從1開始,后面的人報數(shù)接龍,直到K為止,報數(shù)為K的人將出局。
3、出局者的下一個玩家接著從1開始報數(shù),如此循環(huán),直到剩下一個玩家時游戲結(jié)束,這個玩家就是游戲獲勝者。
那么問題來了,哪個編號是游戲獲勝者呢?
下面通過簡單的幾行python代碼來解決這個問題:
#!/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)報數(shù)out一個編號,最后剩下的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++語言常見的機(jī)試題目,以下程序?qū)崿F(xiàn)從控制臺輸入人數(shù)N,C并將剔除出隊(duì)列的人員編號按順序輸出到控制臺上。
- C++循環(huán)鏈表之約瑟夫環(huán)的實(shí)現(xiàn)方法
- C++ 約瑟夫環(huán)的實(shí)例代碼
- C++ 中循環(huán)鏈表和約瑟夫環(huán)
- C++ 中約瑟夫環(huán)替換計數(shù)器m(數(shù)組解決)
- 詳解基于C++實(shí)現(xiàn)約瑟夫環(huán)問題的三種解法
- 詳解約瑟夫環(huán)問題及其相關(guān)的C語言算法實(shí)現(xiàn)
- 約瑟夫環(huán)問題(數(shù)組法)c語言實(shí)現(xiàn)
- C語言基于循環(huán)鏈表解決約瑟夫環(huán)問題的方法示例
- C語言約瑟夫環(huán)的實(shí)現(xiàn)
- C/C++經(jīng)典算法之約瑟夫問題詳解
相關(guān)文章
Selenium使用Chrome模擬手機(jī)瀏覽器方法解析
這篇文章主要介紹了Selenium使用Chrome模擬手機(jī)瀏覽器方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
一些讓Python代碼簡潔的實(shí)用技巧總結(jié)
隨著項(xiàng)目代碼行數(shù)的增加,不可避免的遇到軟件架構(gòu)腐敗的問題,所以如何寫出簡潔的代碼至關(guān)重要,這篇文章主要給大家介紹了一些讓Python代碼簡潔的實(shí)用技巧,需要的朋友可以參考下2021-08-08
Python正則表達(dá)式re.compile()和re.findall()詳解
re?模塊提供了不少有用的函數(shù),用以匹配字符串,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式re.compile()和re.findall()的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
python實(shí)現(xiàn)rar解壓和壓縮的方法(附源碼)
數(shù)據(jù)量現(xiàn)在越來越大,壓縮文件在日常生活中很常用,這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)rar解壓和壓縮的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
python+matplotlib繪制簡單的海豚(頂點(diǎn)和節(jié)點(diǎn)的操作)
這篇文章主要介紹了python+matplotlib繪制簡單的海豚(頂點(diǎn)和節(jié)點(diǎn)的操作),具有一定借鑒價值,需要的朋友可以參考下2018-01-01

