C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

行ごとに乱数で0、1を指定して二次配列を作る方法について

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■95432 / inTopicNo.1)  行ごとに乱数で0、1を指定して二次配列を作る方法について
  
□投稿者/ サイカク (1回)-(2020/08/01(Sat) 21:27:09)

分類:[C#] 

初めて投稿いたします。
C#を始めて1週間ののサイカクと申します。
VisualStudioCodeで開発を行っており、versionは1.47です。

現在、「0」と「1」で構成された6×6の二次配列を作ろうとしています。
その際、行ごとに「0」を4つ、「1」を2つランダムで格納させたいです。
(列ごとの「0」と「1」の構成はどんな形であれ構わないです)
つまり、36個の要素の構成は最終的に「0」が24個、「1」が12個になります。

具体的には

000110
100100
001010
110000
101000
001001

このような二次配列を完成させたいと思っています。
二次配列の作り方や、1次配列の乱数指定方法は存じているのですが、
組み合わせて運用する方法を理解できなかったので、ご質問させていただきました。

初歩的な質問で申し訳ありません。
何卒ご回答のほど、よろしくお願い申し上げます。

引用返信 編集キー/
■95434 / inTopicNo.2)  Re[1]: 行ごとに乱数で0、1を指定して二次配列を作る方法について
□投稿者/ キングダム (60回)-(2020/08/01(Sat) 22:14:30)
No95432 (サイカク さん) に返信
{0, 0, 0, 0, 1, 1}
をシャッフルして各行に入れて行けば良いです。

シャッフルのアルゴリズムは.NETにあったかしら。
ちょっとわからないですけど、Fisher-Yatesでググったら幸せになれます。
引用返信 編集キー/
■95436 / inTopicNo.3)  Re[1]: 行ごとに乱数で0、1を指定して二次配列を作る方法について
□投稿者/ くまくま (24回)-(2020/08/01(Sat) 22:20:50)
2020/08/01(Sat) 22:22:47 編集(投稿者)
2020/08/01(Sat) 22:21:51 編集(投稿者)

No95432 (サイカク さん) に返信
>>行ごとに「0」を4つ、「1」を2つランダムで格納させたいです。
よくやる方法
1. まず1次元で「0」を4つ、「1」を2つの全パターンの配列を作成
これを「パターン配列」とすると

2a. 重複ありの場合
ランダムで「パターン配列」のインデックスを取得し2次元配列に設定

2b. 重複なしの場合
ランダムで「パターン配列」のインデックスを取得し
2b.a. 「パターン配列」に値が設定されていたら2次元配列に設定
その後「パターン配列」から値を削除
2b.b. 「パターン配列」に値が設定されていなかったら再度インデックス取得

こんな感じだとデバックもしやすいし「パターン配列」の設定次第でランダム性を変化もしやすいですよ
引用返信 編集キー/
■95439 / inTopicNo.4)  Re[2]: 行ごとに乱数で0、1を指定して二次配列を作る方法について
□投稿者/ サイカク (2回)-(2020/08/01(Sat) 22:54:01)
No95434 (キングダム さん) に返信

早速のご返信ありがとうございます。

> Fisher-Yatesでググったら幸せになれます。
このアルゴリズムを使用したところ、うまく二次配列を作ることができました。

非常に勉強になりました。
ありがとうございます。
解決済み
引用返信 編集キー/
■95440 / inTopicNo.5)  Re[2]: 行ごとに乱数で0、1を指定して二次配列を作る方法について
□投稿者/ サイカク (3回)-(2020/08/01(Sat) 23:01:18)
No95436 (くまくま さん) に返信

ご返信ありがとうございます。

> 1. まず1次元で「0」を4つ、「1」を2つの全パターンの配列を作成
> これを「パターン配列」とすると
>
> 2a. 重複ありの場合
> ランダムで「パターン配列」のインデックスを取得し2次元配列に設定
>
> 2b. 重複なしの場合
> ランダムで「パターン配列」のインデックスを取得し
> 2b.a. 「パターン配列」に値が設定されていたら2次元配列に設定
> その後「パターン配列」から値を削除
> 2b.b. 「パターン配列」に値が設定されていなかったら再度インデックス取得

こちらの方法でも試してみたところ、求めていた二次配列が出来上がりました。
デバッグも簡単そうなので、今後の開発で役立てていこうと思います。
ご指導いただき、ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ