平成21年春期午後問8  空欄a,b

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
カレーライスさん  
(No.1)
こんにちは。アルゴリズムの問題で質問です。

https://www.fe-siken.com/kakomon/21_haru/pm08.html の設問の c.dについて解説お願いします。

まず、cで外側の領域の数は10×10-8×8=36なのではないでしょうか?(問題は32になっています。)

次にdってもともと使える色は0~3だったけど0~255になった場合の話ですか?


2021.07.15 00:26
みどりさん 
(No.2)
1つ目は行番号16~23の処理を見てみると
配列の添え字V,Hの繰り返しがが0~9ではなく1~8になっているので
プログラム上では四隅を除いた外周(36-4 = 32)に値を設定しています。

2つ目はそれで合ってます。(正確にはもともとが1~3)
もし外周に設定する値0に色の値が被ったらという話です。
2021.07.15 09:51
かなさん 
FE ブロンズマイスター
(No.3)
>まず、cで外側の領域の数は10×10-8×8=36なのではないでしょうか?(問題は32になっています。)
一度トレースしていただきたいのですが、Image[0,0], Image[0,9], Image[9,0], Image[9,9]の4か所は処理の対象外なので、10×10-8×8-4=32が正解です。

>次にdってもともと使える色は0~3だったけど0~255になった場合の話ですか?
0は壁であることを示す特別な値なので、色ではありません。この問題は、0を特別な値として用い、それ以外の数字も1, 2, 3しかないから、特別な数字と色を示す数字がバッティングすることはなかったからよかったけど、0~255のすべてが使えるようになったら、壁は「何色」で塗ればよいかという問題です。
2021.07.15 11:12
カレーライスさん  
(No.4)
みどりさん。かなさん。ご回答ありがとうございます。

よくわかりました。これでこの問題はクリアです。本当にありがとうございました。
2021.07.15 22:01
カレーライスさん  
(No.5)
やっぱりすみません。空欄dなんですけど変数wallには0~255の範囲にバッティングしない数値が入るん

ですよね。もしそうなら、ウのNCは塗り替える色なので0~255の範囲にバッティングすると思います。

何度もすみません。根本的に勘違いしているのでしょうか?よろしくお願いします。
2021.07.15 22:19
みどりさん 
(No.6)
実はそこは私も気になっていました。ということで改めて読み直してきました。


まずこのプログラムは"同じ色(CC)の領域を指定した色(NC)で塗り替える"ものです。

そして色の値を0~255にすることで起こりうる可能性が
「外周の壁(Wall)と同じ色(CC)が被ると、壁までが塗り替えの対象になってしまい塗り替えの処理が正常に行われない」ことです。
逆にCC以外を壁に設定すると"同じ色の塗り替え"自体に影響はなく必ず正常に行われます。なので壁(Wall)と同じ色(CC)が被らない選択肢を探そうという話です。

(ア)Wall ← CC  …被ってるのでアウト
(ウ)Wall ← 256 - CC  …CCが128だと被るのでアウト(0のときも値が0~255の範囲外となって別のアウト)
(エ)Wall ← 255 - NC  …NCが0でCCが255とかだと被るのでアウト

唯一(イ)の選択肢のみがCCと被らず正常に動くので(イ)が正解です。
考え方としては大体こんな感じだと思います。


午後問題って難しいですね!!!!!
2021.07.16 01:49
かなさん 
FE ブロンズマイスター
(No.7)
http://i.imgur.com/DhA5V7e.png

上の画像は、ひらがなの「か」ですが、このとき3画目の「`」のセルを選択したときの塗り替えは、3画目の範囲だけ行われるべきです。

しかしながら、0~255のすべてが使えるようになり、3画目・壁・「カ」の部分(1画目と2画目)の色がすべて同じだと、壁の塗り替えを経由して、「カ」の部分の色まで塗り替えてしまいます。
逆に、3画目と壁の色が異なれば、壁の色は塗り替えられず、「カ」の部分の色も塗り替えられません。

そこで、塗り替え始めるセルの初期値と壁の色が異なるように、壁の色を設定しなければなりません。
どの色が「塗り替え始めるセルの初期値と壁の色が異なる」のかについてはみどりさんが上で解説なさっているので、そちらをご覧ください。
2021.07.16 07:44
GinSanaさん 
FE シルバーマイスター
(No.8)
>0のときも値が0~255の範囲外となって別のアウト
は、オーバーフローして0に戻ってしまいあかん、となるからです。範囲外エラーを自分で仕込んでいるなら「別のアウト」にできますが、してなければオーバーフローで、エラーにはなりません。UNIXのリターンコードがmod 256をしているような感じで。
2021.07.16 07:49
みどりさん 
(No.9)
>GinSana さん
なるほど、補足ありがとうございます!!
2021.07.16 09:05
カレーライスさん  
(No.10)
みどりさん、かなさん、GinSana どうもありがとうございます。

皆さんの充実した丁寧な解説でこの問題は完全に理解できました。

引き続きアルゴリズムの過去問を解いていきます。まだまだ未熟なので分からないがあればまたお願いし

ます。
2021.07.16 21:44
かなさん 
FE ブロンズマイスター
(No.11)
亀ですが、修正させてください。

>しかしながら、0~255のすべてが使えるようになり、3画目・壁・「カ」の部分(1画目と2画目)の色がすべて同じだと、壁の塗り替えを経由して、「カ」の部分の色まで塗り替えてしまいます。

と申し上げましたが、壁が塗り替えられると、壁の一つ奥のマスも走査対象になってしまいます.
しかし、そこは存在しない要素ですから、javaならOutOfBoundsExceptionがスローされてプログラムが強制終了しますし、それ以外の言語でもなんらかのトラブルが発生しそうです。

結局まともに動かないというのは変わりませんが、挙動が変わりそうです。
以上訂正いたします。
2021.07.21 13:02

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop