約瑟夫問題的Python和C++求解方法
么是約瑟夫問題?
約瑟夫問題是一個有趣的數(shù)學游戲,游戲規(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++的通常實現(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++語言常見的機試題目,以下程序?qū)崿F(xiàn)從控制臺輸入人數(shù)N,C并將剔除出隊列的人員編號按順序輸出到控制臺上。
相關文章
解決Python 函數(shù)聲明先后順序出現(xiàn)的問題
這篇文章主要介紹了如何解決Python 函數(shù)聲明先后順序的問題,幫助大家更好的理解和學習python,感興趣的朋友可以了解下2020-09-09
Python Multinomial Naive Bayes多項貝葉斯模型實現(xiàn)原理介紹
這篇文章主要介紹了Python Multinomial Naive Bayes多項貝葉斯模型實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-09-09
Python?Pexpect庫自動化交互式進程控制的expect_list方法解析
Pexpect是一個Python庫,為自動化和交互式進程控制提供了豐富的功能,而expect_list方法是其功能強大且靈活的一部分,將詳細探討如何使用這一方法,并提供多個示例來說明其應用場景和功能2024-01-01
python調(diào)用百度AI接口實現(xiàn)人流量統(tǒng)計
這篇文章主要介紹了python調(diào)用百度AI接口實現(xiàn)人流量統(tǒng)計,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
python類和函數(shù)中使用靜態(tài)變量的方法
這篇文章主要介紹了python類和函數(shù)中使用靜態(tài)變量的方法,實例分析了三種常用的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-05-05

