http://www.itmedia.co.jp/enterprise/articles/090 …
この記事で書かれているコードで
for (int j = Math.Max(0, K - (A + B - i)); j <= Math.Min(i, K); j++) //jは0をひっくり返す数
なぜこのような式になるのか分かりません。
解説お願いできないでしょうか
No.2ベストアンサー
- 回答日時:
いくつ0から1にすれば(ひっくり返せば)解が得られるかを、探索によって求めているプログラムですね。
0か1どちらかに着目すれば、もう一方の数字は計算できるからです。
定義
ひっくり返す:0は1に、1は0にすること。上記URLの2ページ目のカードをイメージしてください。
前提
1)プログラム上は、何枚ひっくり返すか、ということしかプログラミングされていません。A+B枚のカードの状態をシミュレートしたプログラムではありません。
2)Math.Max(a,b) a,bいずれかの大きなほうの値を返す
Math.Min(a,b)いずれか小さなほうの値を返す
変数jの初期値:
int j = Math.Max(0, K - (A + B - i))
基本は0から探索を始めますが、場に出ているカードが0に偏っている場合は0を優先して多くひっくり返したいという意図があります。
A + B < Kの場合-1でreturnする処理が入っているので、iが小さければマイナスの値になるのがわかるかと思います。変数iが大きくなるとプラスすなわち0より大きくなるタイミングが生じて、その値から探索を始めるようになります。
変数jのループ終了条件:
現状その場に出ている0(変数i)のカードより多くの枚数あるいはルール上K枚以上のカードをひっくり返すことはできないので、このような定義になります。
nextzero = i + (K - 2 * j)について:
カードをひっくり返し終わったあとの0のカードの枚数です。これが0になるまで探索を続けているということになります。数式に引っ掛かりますが、j<Kのとき、K-j分の場に出ている0のカードは1になるため、その考慮がされているということになります。
小さな数字を代入して、計算してみれば整理できると思います。
回答して頂きありがとうございます。
何度も読み返し、実際にループ毎に変数の値を出力し
幅優先探索をつかって求めていること理解できました。
ただ、計算方法は頭の良い人でないと閃かないのかなとも感じました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- 大学・短大 (大学数学)こういった問題集が欲しいです。 3 2022/10/01 11:54
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- 英語 彼にとって科学は数学よりも簡単です For him science is ____ ____ mat 2 2022/12/24 17:02
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
首吊りどこ締めるの
-
変な話しになります。尿検査で...
-
白血球が多いとどんな心配があ...
-
今朝、毎朝の習慣でオナニーし...
-
1日前の検尿
-
射精をして1週間以内に尿検査を...
-
検便についてです。 便は取れた...
-
EXCELで条件付き書式で空白セル...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
男です。昨日の午後3時くらいに...
-
EXCELで式からグラフを描くには?
-
彼女のことが好きすぎて彼女の...
-
中出しをするとお腹が痛い・・・。
-
値が入っているときだけ計算結...
-
これって喉仏ですか? 私は女性...
-
EXCELの条件付き書式で数式を空...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
中出しをするとお腹が痛い・・・。
-
麻疹風疹の抗体検査結果につい...
-
エクセルでエラーが出て困って...
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
勃起する時って痛いんですか? ...
-
至急!尿検査前日にオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
精子が黄色?
-
小数点以下を繰り上げたものを...
-
値が入っているときだけ計算結...
-
口の中に黒い血の塊
-
健否~書類の書き方~
-
甲状腺が腫れているが血液検査...
-
はしかの抗体検査は何科の病院...
-
テスターで断線を調べる方法教...
おすすめ情報