2017-03-25 40 views
0

我試圖創建一個從1到75範圍內的賓果遊戲的隨機數矩陣。用1到75之間的隨機數創建一個不同的矩陣

但是,我無法生成不同的數字。

第一行應該沒有從1至15,第二行16至30,第三行31至45,描述了從46行至60和第五行61至75。

void creatingbingo() 
{ int ar[5][5],values[5],i,j,k,n; 


//creating bingo ticket 
//initializing the values of ticket 
for(i=0;i<=4;i++) 
{ 
    values[i]=0; 
} 
for(i=0;i<=4;i++) 
{ 
    for(j=0;j<=4;j++) 
    { 
     loop:k=0; 
     do 
     { 
      uniform_int_distribution<int> rows (((15*(i+1)-15+1)),(15*(i+1))); 
      n=rows(randgenerate); 
      if(values[k]==n) 
      { 
       k=0; 
       goto loop; 
      } 
      else 
      { 
       values[k++]=n; 
      } 
     }while(k<5); 
      ar[i][j]=values[j];//filling the ticket 
    } 
} 
//displaying the ticket 
for(i=0;i<5;i++) 
{ 
    for(j=0;j<5;j++) 
    { 
     cout<<ar[i][j]<<'\t'; 
    } 
    cout<<endl; 
} 
} 

An example of output which I got is: 
11  14  8  5  10 
16  26  24  25  19 
41  45  38  43  31 
55  52  60  53  60 
62  70  71  68  75 
+0

這裏沒有。 60重複兩次。 –

回答

0

有一個更簡單的方法來做到這一點:創建一個數組從1 b 15的元件15對於每一行a[i],洗牌b,那麼b第一5個元素複製到row,並添加到15*ia[i]每個元素。

示例工作代碼:

#include <iostream> 
#include <random> 
#include <boost/random/random_device.hpp> 
#include <vector> 
#include <numeric> 
#include <algorithm> 

std::mt19937 rng{boost::random_device{}()}; 

std::vector<std::vector<int>> creatingbingo() 
{ 
    std::vector<std::vector<int>> a(5, std::vector<int>(5)); 
    std::vector<int> b(15); 
    std::iota(begin(b), end(b), 1); //b = 1 2 3 ... 14 15 
    for (size_t i = 0; i < a.size(); ++i) 
    { 
     std::shuffle(begin(b), end(b), rng); 
     std::copy(begin(b), begin(b) + a[i].size(), begin(a[i])); 
     for (int& n : a[i]) n += 15*i; 
    } 
    return a; 
} 

int main() 
{ 
    for (auto& row : creatingbingo()) 
    { 
     for (int n : row) 
      std::cout << n << "\t"; 
     std::cout << "\n"; 
    } 
} 

「簡單」 的版本:

#include <iostream> 
#include <algorithm> //std::shuffle 
#include <random> //std::mt19937 
#include <ctime>  //to seed rng 

struct BingoTicket { //create a wrapper struct to return 5x5 matrix 
    int grid[5][5]; 
}; 

BingoTicket createBingoTicket(std::mt19937& rng) 
{ 
    BingoTicket ticket; 

    // Create an array of 15 elements with values from 1 to 15 
    int b[15]; 
    for (int i = 0; i < 15; i++) 
     b[i] = i+1; 

    for (int i = 0; i < 5; ++i) //iterate each row of `ticket.grid` 
    { 
     // Shuffle b using a given random generator `rng` 
     std::shuffle(b, b+15, rng); 
     // Copy first 5 elements in `b` to `ticket.grid[i]`, 
     //and add 0/15/30/45/60 so that row 1 will have values 
     //from 1-15, row 2 from 16-30, etc. 
     for (int j = 0; j < 5; j++) 
      ticket.grid[i][j] = b[j] + 15*i; 
    } 

    return ticket; 
} 

int main() 
{ 
    // Seed rng 
    std::mt19937 rng; 
    rng.seed(time(0)); 

    BingoTicket ticket = createBingoTicket(rng); 
    for (int i = 0; i < 5; i++) 
    { 
     for (int j = 0; j < 5; j++) 
      std::cout << ticket.grid[i][j] << "\t"; 
     std::cout << "\n"; 
    } 
} 

(可以使用std::random_device種子rng,或使用std::chrono,而不是ctime

+0

可以用簡單的C++語言編寫這段代碼請@tntxtnt –

+0

我看你在你的代碼中使用'uniform_int_distribution',所以我猜你知道C++怎麼樣'' – tntxtnt

+0

謝謝......但是這裏使用shuffle函數@tntxnt –

相關問題