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

べんつよたのしい(おめめぐるぐる)

というわけでぽはようございます。なつきちです。
前回詰まってたAtCoder Beginners Selection の第四問について、偉大なるC言語学習サイト(苦しんで覚えるC言語 - https://goo.gl/XVKYuJ)に助けを求めたところ、動的配列なるものに行き着きました。

そしてそれを理解するためには今まで避けていた悪名高きポインタの理解が必要だったので、頑張っておべんつよしていました。
おかげでポインタ半分くらい理解した(ほんまか?)


まあぶっちゃけおべんつよして分かったこととか中国幼女定理さん(@littlegirl0820)からいただいた助言とかで、「別にmalloc関数使わなくてもよくね?」と気付いたのですが、知識を深められたので良しとします。


さて、中国幼女定理さんのご助言によってFor 文を組み合わせれば任意の配列を入力できる(見てそりゃそうだなってなった)ということに気付いたので、カキカキします。


まあこんな感じでしょう(よく見るとscanf関数の中で"n"に&をつけていませんが)。変数宣言が幼稚なのも許してください。まだ幼いのです。

続いて前回考察したことを実装します。偶数かどうか確認してから割っていくというアレですね。
ただこの問題は「入力された整数全てを2で割ったものに置き換える」ことを1セットとした上で、それが何セット繰り返せるのかを出力する必要があります。従ってカウント方法に気をつけなければならないんですよね。

流れとしては



こんな感じにすればいいのかな?
奇数偶数を判定するにも、2で割るにも、この工程そのものをループするにも繰り返しを使うので、繰り返しの入れ子構造になりそうですね。
こうなると関数のモジュール化をした方がいい気がしてきたので、ググりつつ進めます。
――が、よくわからず混乱したので脳筋ゴリラの如くmain関数1つでごり押しすることに。

奇数が出る度に変数を++し、ループ終了後にその変数をチェックすることによって「全て偶数であるか」を判定します。


色々不備はあるだろうけどとりあえずこれで。
で、まあ他のも適当に↓



あとはこの工程自体をループさせれば良いわけだけど――まあwhile文ですかね。
条件式 odd == 0("odd"は出てきた奇数の数をカウントしている変数)で出来そうです。



それでは実行してみます。


これ俗に言う「優勝」では――?



優勝してました!!!!わーい!!!!!!うれしい!!!!!!!!

いやしんどかったけど、何かやっぱり嬉しいですね、正解すると。
――あ、ユーザ名晒してますけどまあ気にせず。別にデメリットない、よね?

頑張った甲斐があったなあ、なんて肩の力を抜いて、今回はここまでです!あざました!!

小ネタ

――「今回はここまで」と言ったな?
あれは嘘だ――

いや、何でもないんだけどさ、見てくれよこれを

















な阪関無


以上です(ちなみに昨日3/21夜の画像です)。

コメント

このブログの人気の投稿

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

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

AtCoder Beginners Selection も中盤に差し掛かっている