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

わんくま同盟

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

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

ツリー一括表示

行ごとに乱数で0、1を指定して二次配列を作る方法について /サイカク (20/08/01(Sat) 21:27) #95432
Re[1]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. /くまくま (20/08/01(Sat) 22:20) #95436
│└ Re[2]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. /サイカク (20/08/01(Sat) 23:01) #95440 解決済み
Re[1]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. /キングダム (20/08/01(Sat) 22:14) #95434
  └ Re[2]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. /サイカク (20/08/01(Sat) 22:54) #95439 解決済み


親記事 / ▼[ 95436 ] ▼[ 95434 ]
■95432 / 親階層)  行ごとに乱数で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次配列の乱数指定方法は存じているのですが、
組み合わせて運用する方法を理解できなかったので、ご質問させていただきました。

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

[ □ Tree ] 返信 編集キー/

▲[ 95432 ] / ▼[ 95440 ]
■95436 / 1階層)  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. 「パターン配列」に値が設定されていなかったら再度インデックス取得

こんな感じだとデバックもしやすいし「パターン配列」の設定次第でランダム性を変化もしやすいですよ
[ 親 95432 / □ Tree ] 返信 編集キー/

▲[ 95436 ] / 返信無し
■95440 / 2階層)  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. 「パターン配列」に値が設定されていなかったら再度インデックス取得

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

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

シャッフルのアルゴリズムは.NETにあったかしら。
ちょっとわからないですけど、Fisher-Yatesでググったら幸せになれます。
[ 親 95432 / □ Tree ] 返信 編集キー/

▲[ 95434 ] / 返信無し
■95439 / 2階層)  Re[2]: 行ごとに乱数で0、1を指定して二次配列を作る方法について
□投稿者/ サイカク (2回)-(2020/08/01(Sat) 22:54:01)
No95434 (キングダム さん) に返信

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

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

非常に勉強になりました。
ありがとうございます。
解決済み
[ 親 95432 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -