亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

約瑟夫問題的Python和C++求解方法

 更新時間:2015年08月20日 16:59:14   作者:prehistoric  
這篇文章主要介紹了約瑟夫問題的Python和C++求解方法,通過其示例我們也可以看出如今寫法最簡潔的編程語言和最復(fù)雜的語言之間的對比:D 需要的朋友可以參考下

么是約瑟夫問題?
約瑟夫問題是一個有趣的數(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并將剔除出隊列的人員編號按順序輸出到控制臺上。

相關(guān)文章

最新評論