AtCoder Beginners Selection に参加する~第四問が解けない~

頑張るぞい

今の私にぴったりというか、ニーズにドンピシャのアレ
(AtCoder Beginners Selection - AtCoder Beginners Selection | AtCoder - https://goo.gl/7C8JdP)があったので挑戦してみます。
参加ァ!!!


一問目はプラクティスで解いたことがあったので二問目へ。

これはサクッとACできました。嬉しい。

三問目もサクッとできた――と思ったんだけれども、どうにも挙動が怪しい。文字列と数字を混同していたために上手くいかなかったようでした。
しかしそれに気付いて無事にAC。


さて、問題は四問目から。

ここからはB問題となるわけです。
プロならば目を瞑っていても解けるでしょうが、私はビギナー、既にいっぱいいっぱいとなっています。
問題は以下。


少しだけですが数学色が出てきやがりました。
別に小学生でも解けるような問題だろって?
確かにそうですね。しかしあなたは私が小学生以下の知能しかないということを見落としています。

「まあ何かアレでしょ、2使って素因数分解っぽい何かをすればいいんでしょ?」
と、数学を理解している方から参考書で撲殺されそうなことを考えながら論理を組み立てるのが私です。恐れ入ったか? 震えて眠れ。

まあパッと見で繰り返しとif文を使うんだろうなぁと思いつつ、とりあえず脳死でscanf関数をカキカキしようとして、幾つ変数を用意すれば良いんだろうと困りました。改めて問題を見るとそこには 1<=N<=200 の記載が。
ここでなつきちの脳裏に電流。「こういう時は配列を使えばいい」――そんなワードが思考の海から浮かび上がりました。
正しくそれは天啓。
「あっこれ進研ゼミで(ry」と叫びたくなる某漫画の主人公の気持ちがとてもとてもよく分かりました。
ニヤニヤ笑いで int a[200]; と宣言してやりました。
ちゃんとべんつよが身に着いていてなつきち素直に感涙です。(自分を褒めないとモチベが保てない系の人間です)
基本中の基本だろって? それ is そう。でもググらずに思い出せたの褒めて。

さて、自分ageはここまでにして更に考察を進めていきます。

この問題を解くにあたって必要な処理は、
・入力された数字が全て偶数であるかを判定する処理
・いずれかの数字が2で割れなくなるまで2で割り続ける処理
となるはずです(たぶん)。

もっと考えてまとめると、
「数字たちを2で割る前に、それらの数が全て偶数であるか判定する処理を挟めばいい」
ってわけですね。
そしてそれは繰り返しを上手く使えば簡単に実装できそうです。

なるほど、大体わかった。

さて、じゃあ気を取り直して scanf 関数をカキカキしますかね――ってところでまた壁に激突しました。
――否、それは再突入。

「配列で変数を大量に用意したのはいいけど、scanf 関数には変換指定子を幾つ書いておけば良いんだろう? ――scanf("%d %d ... %d", a[0], a[1], ... , a[200]); とか書くの!? バカでは!?」

という壁です。
なーにが「天啓」じゃ氏ね全然成長しとらんやんけゴミカスという罵倒を自らに叩き込み、ついでに床を叩きながら某クソマンガの偉大なる名言を叫び散らしつつ頭を抱えることしばし。

とりあえず睡眠を選択しました。

また明日頑張ろう。


あ、コメントとかご自由に書き置いて行ってください。煽りでもクソリプでも何でも可です。
アドバイスなんかいただいた日には、全身から得体の知れない汁を出して喜びます。





コメント

このブログの人気の投稿

そして三ヶ月が経った――書くの面倒だっただけでちょっとは進捗あったんだよ――

どうも第四問を解くには色々べんつよが必要らしいのでべんつよする