
俄羅斯輪盤賭的基本思想
俄羅斯輪盤賭(Russian roulette)是一種殘忍的賭博游戲,俄羅斯輪盤賭的賭具是左輪手槍]和人的性命,俄羅斯輪盤賭的規則很簡單:在左輪手槍的六個彈槽中放入一顆或多顆子彈,任意旋轉轉輪之后,關上轉輪,游戲的參加者輪流把手槍對著自己的頭,扣動板機;中槍的當然是自動退出,怯場的也為輸,堅持到最后的就是勝者,
只要運氣不好,每次都會第一次找到,
步驟
俄羅斯輪盤賭的核心在于裝入子彈之后任意旋轉轉輪,增加了隨機性,
- 根據亂數生成開始的下標,并進行標記,
- 從標記處開始回圈順序查找,
- 直到回圈一遍還未找到則停止,
演算法代碼
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
//俄羅斯輪盤賭演算法
void DrawAlgorithm(int nums[],int n,int bullet){
srand((int)time(0));
int begin=rand()%n,mark=begin,count=0; //利用亂數生成第一次比較的下標 begin,mark 對第一次比較的位置進行標記
do{
count++;
if(nums[begin]==bullet){ //查看當前位置的元素是否存在于 bullets 陣列
cout<<bullet<<"已找到,查找次數為:"<<count<<endl; //如果存在則命中
return;
}
if(++begin==n){ //判斷是否越界
begin=0;
}
}while(mark!=begin); //如果回圈一遍代表沒有找到
cout<<"沒有找到"<<endl;
}
//列印陣列
void printNum(int numbers[],int n){
for(int i=0;i<n;i++){
cout<<numbers[i]<<" ";
}
cout<<endl;
}
int main()
{
int numbers[10]={3,44,38,5,47,15,99,32,66,100};
int n=sizeof(numbers)/sizeof(numbers[0]); //陣列長度
cout<<"序列為:";
printNum(numbers,n);
DrawAlgorithm(numbers,n,5); //呼叫 DrawAlgorithm 函式在 numbers 序列中進行抽簽查找 5
return 0;
}
演算法性能分析
- 空間復雜度: O ( 1 ) O(1) O(1)
- 時間復雜度
- 最好情況下時間復雜度: O ( 1 ) O(1) O(1)
- 最壞情況下時間復雜度: O ( n ) O(n) O(n)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299043.html
標籤:其他
