欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

么是約瑟夫問題?
約瑟夫問題是一個(gè)有趣的數(shù)學(xué)游戲,游戲規(guī)則如下:
1、N個(gè)人圍成一個(gè)圈,編號(hào)從1開始,依次到N。
2、編號(hào)為M的游戲參與者開始報(bào)數(shù),報(bào)數(shù)從1開始,后面的人報(bào)數(shù)接龍,直到K為止,報(bào)數(shù)為K的人將出局。
3、出局者的下一個(gè)玩家接著從1開始報(bào)數(shù),如此循環(huán),直到剩下一個(gè)玩家時(shí)游戲結(jié)束,這個(gè)玩家就是游戲獲勝者。
那么問題來了,哪個(gè)編號(hào)是游戲獲勝者呢?
下面通過簡(jiǎn)單的幾行python代碼來解決這個(gè)問題:

#!/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++語言常見的機(jī)試題目,以下程序?qū)崿F(xiàn)從控制臺(tái)輸入人數(shù)N,C并將剔除出隊(duì)列的人員編號(hào)按順序輸出到控制臺(tái)上。

相關(guān)文章

最新評(píng)論