今回は古い記事を読み直して、PaizaオンラインハッカソンVol.6に参加してみた(六村リオミッション, C++)とPaizaオンラインハッカソンVol.6に参加してみた(六村リオミッション, C言語)を読み直してみたい。というのも、この問題で一定数のプログラミング学習者がとあることでつまずいているというケースが見られるからである。
問題と解答例
まず、よくある間違いを説明する前に、以下のリンクを参照されたい。
問題
解答例
よくある間違いポイント解説
味見の処理を間違えている
当該問題でハマるポイントとしては、「味見をする」ということに尽きる。
これは、味見をするというのは、実質的にはお湯とコーヒー粉の水溶液の量を減らすということになる。ということは、どういうことになるだろうか?
数式としては、以下のようになる。
コーヒーの量 – 味見した量 = 残ったコーヒーの量
なお、ここでは濃度は均一として扱うため、コーヒー粉・湯共にそれぞれの割合に応じて減るということになる。
例えば、『オンラインハッカソン「六村リオのコーヒー問題」』(Met4licのあけくれ帖)の記事においては、味見をする際にまずお湯の量の減算、次にコーヒー粉の量の減算という計算方法で行なっているが、実はコーヒー粉の減算の際に、本来なら減算する前の湯の量を計算ソースにしなければならないのを、減算した後の値を使ってしまっているということになる。
この場合、計算が間違ってしまっているので(計算ソースに使うべき量よりも少なくなってしまい、本来の値よりも濃くなってしまう問題になる)、間違いということになる。
なお、私の場合は、実際に味見の処理をする前に、味見前の合計値を一旦ローカル変数に取ってから、それを元にコーヒー粉・湯を減算するという方法を取っているため、計算ミスが発生しないようになっている。
ここは、よくあるミスなので、気をつけたいところである
最後に
今回は、かなり古い記事のおさらい的な側面もあって、簡潔に書いて見た。一見すると正しいように見えるけれど、実は間違っているということはよくあるので、是非とも気をつけたいところである。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。