2017-03-25 8 views
0

ビンゴ・ゲームのために1から75までの乱数行列を作成しようとしました。1から75までの乱数を使った明確な行列を作成してください。

しかし、別の番号を生成することはできません。

最初の行は1から15まで無有するべきで、16から30への第2行は、31から45への第三の行は、記載61〜60と5行目に46から行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を2回繰り返す。 –

答えて

0

これは簡単な方法です:bを15から15までの要素で構成します。各行にをシャッフルして、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"; 
    } 
} 

(あなたがrngをシード、またはctimeの代わりにstd::chronoを使用するようにstd::random_deviceを使用することができます)

+0

シンプルなC++言語でこのコードを書くことができますか? –

+0

あなたのコードに 'uniform_int_distribution'を使用していますので、C++についてはあなたが知っていると思います。 tntxtnt

+0

ありがとう...しかし、シャッフル関数@tntxnt –

関連する問題