(2019年9月7日)
■使用ソフト
・Visual Studio Community 2019
■言語
・C/C++
■Windows SDK バージョン
・10.0.17763.0
※Windows SDK バージョンの変更方法
■手順
1.以下をベースにコード変更する。
【C++】 メッセージボックスの作成
2.C++ファイル(.cpp)を以下のとおり変更する。
#include <windows.h>
#include <random>
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
WCHAR wcText[256];
int size = 5;
int randmin = 0;
int randmax = 9;
std::vector<int> v;
v.reserve(randmax - randmin + 1);
for (int i = randmin; i <= randmax; i++) v.push_back(i);//0, 1, 2, 3, 4, 5, 6, 7, 8, 9
std::random_device seed;
std::mt19937 random(seed());
for (int i = 0; i < size; i++)
{
int x = std::uniform_int_distribution<int>(i, randmax - randmin)(random);
if (i != x) std::swap(v[i], v[x]);
}
swprintf(wcText, 256, L"%d %d %d %d %d", v[0], v[1], v[2], v[3], v[4]);
MessageBox(NULL, wcText, L"Fisher-Yates法", MB_OK);
return 0;
}
#include <random>
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
WCHAR wcText[256];
int size = 5;
int randmin = 0;
int randmax = 9;
std::vector<int> v;
v.reserve(randmax - randmin + 1);
for (int i = randmin; i <= randmax; i++) v.push_back(i);//0, 1, 2, 3, 4, 5, 6, 7, 8, 9
std::random_device seed;
std::mt19937 random(seed());
for (int i = 0; i < size; i++)
{
int x = std::uniform_int_distribution<int>(i, randmax - randmin)(random);
if (i != x) std::swap(v[i], v[x]);
}
swprintf(wcText, 256, L"%d %d %d %d %d", v[0], v[1], v[2], v[3], v[4]);
MessageBox(NULL, wcText, L"Fisher-Yates法", MB_OK);
return 0;
}
3.実行結果(0~9までの数字をシャッフルして、最初の5文字を出力する)
4.参考文献
C++で効率よく重複のない乱数列を生成する
0 件のコメント:
コメントを投稿