国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 17:04:59
字體:
來源:轉載
供稿:網友

么是約瑟夫問題?
約瑟夫問題是一個有趣的數學游戲,游戲規則如下:
1、N個人圍成一個圈,編號從1開始,依次到N。
2、編號為M的游戲參與者開始報數,報數從1開始,后面的人報數接龍,直到K為止,報數為K的人將出局。
3、出局者的下一個玩家接著從1開始報數,如此循環,直到剩下一個玩家時游戲結束,這個玩家就是游戲獲勝者。
那么問題來了,哪個編號是游戲獲勝者呢?
下面通過簡單的幾行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()函數中,參數total即上面提到的N,begins即M,count及K,每次循環報數out一個編號,最后剩下的survivor便是游戲獲勝者。

而C++的通常實現方法如下:

#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++語言常見的機試題目,以下程序實現從控制臺輸入人數N,C并將剔除出隊列的人員編號按順序輸出到控制臺上。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海兴县| 桂东县| 米林县| 台江县| 壶关县| 紫金县| 宜丰县| 理塘县| 长岭县| 鄂伦春自治旗| 监利县| 栾川县| 吴川市| 积石山| 方山县| 保定市| 曲靖市| 即墨市| 博湖县| 聂荣县| 永清县| 静海县| 鄱阳县| 蕲春县| 高要市| 郁南县| 绍兴市| 福泉市| 连平县| 广丰县| 微博| 琼中| 灵山县| 林口县| 富民县| 富民县| 宜章县| 加查县| 仁布县| 荆州市| 朝阳县|