c言語で、hairetu[8][8]があったとして、その中でいくつかの中に1が入っていて、そのほかは0が入っているとします。
0 1 2 3 4 5 6 7
0|1 0 0 0 1 1 1 0
1|1 0 0 0 0 0 0 1
2|0 1 1 0 1 0 1 1
3|・・・・・・・・・・・・
4|・・・・・・・・・・・・
5|
6|・・・・・・・・・・・・
7|0 1 1 0 0 0 0 1
という具合です。
そのとき、ランダムで1を1箇所しかない状態にしたいのですが、
自分が考えた方法だと無駄が多いので、もっとスマートな方法はないかと思い質問させてもらいました。基本的な質問なのですがよろしくお願いします。
以下自分が考えた方法
[64][2]の配列を作成し、上記の[8][8]の配列をfor文で解析し、1が入ってるところの番号を配列[64][2]に格納する。
乱数を使い、ひとつだけ選択する。
No.2ベストアンサー
- 回答日時:
カテゴリをC言語にしてらっしゃいますが、その問題はC言語に限った問題ではないでしょう。
まず、最適なアルゴリズムを選ぶのに重要なことは、0と1の分布がどうなっているかです。1の数が非常に少ない場合は、質問者さんの出したようなアルゴリズムでするしかありません。
1の割合がもっと多い場合は、先に位置を乱数で選択して、そのあとその位置の値が1かどうか判定するという乱択アルゴリズムのほうが効率がいいでしょう。
他には、配列に入っているという事ならば、並列演算で1の入っている領域を限定出来れば効率化できるかもしれません。
回答ありがとうございます。
確かによく考えたら言語関係なかったですね
カテゴリーミスすいません
さらに1の数の多少を書いておらず、条件が不足しておりました。
重ねてすいません
図ではあんなに調子づいて1を書いてしまいましたが、
数はほとんど一桁に成りそうなので、
自分のやり方でやってみます。
また、並列演算というのはやったことがないので調べてみようとおもいます。
No.3
- 回答日時:
「ランダムで1を1箇所しかない状態にしたい」というだけなら、初期値は一切関係ありません。
全体をゼロクリアしてからランダムに1か所だけを1にすればよいでしょう。
回答ありがとうございます。
説明が下手くそでした。
大変申し訳ないです。
全体からではなく、1が入っていた場所から
ランダムで一ヶ所だけ1にする
と説明するべきでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
unsigned char配列への入力の仕方
-
配列を使わずに、変数名を動的...
-
配列をEraseしてもメモリが開放...
-
c言語でのヒストグラム作成用の...
-
C# Listを使わずに2次元配列の...
-
配列で格納したものをmsgboxで...
-
市販のビンゴカードについて
-
大きさが領域未定の画像の配列...
-
初期化について教えてください
-
C言語の配列について
-
VBでC言語のポインタみたい...
-
実数→文字列の方法
-
【速いブラインドタッチ】手を...
-
【VBS】 フォルダ直下のファイ...
-
C++ vectorに配列をプッシュしたい
-
char型の二次元配列の意味が分...
-
C言語の配列番号が"0"から始ま...
-
malloc呼び出し時のセグメンテ...
-
関数から配列を返すには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
先頭アドレスとは何ですか?
-
C言語で特定列だけを抽出して配...
-
配列の参照渡しで型が一致しま...
-
VBで構造体の配列を関数に渡す...
-
C++ vectorに配列をプッシュしたい
-
【速いブラインドタッチ】手を...
-
unsigned char配列への入力の仕方
-
配列をEraseしてもメモリが開放...
-
【C言語】配列の中に配列を入れ...
-
ExcelVBAで質問です。離れた二...
-
4勤2休のシフト作成
-
Functionの戻り値を2次元配列...
-
Redimした動的配列はEraseする...
-
配列を含む構造体の初期値について
-
複数の選択範囲の行番号を個別...
おすすめ情報