して、ループで要素を受け取ります。用意して、「配列を見て偶数なら2で割る、奇数があれば操作を終える。増やす」という処理を繰り返します。無限ループで実装できますね。なるので、ループは必ずどこかで終わります(奇数が発生します)。0;}中級テクニックこの問題では、各要素を2で割れる回数の最小値が答えになります。そのため、2で割れる回数を計算する関数を作成し、すべての要素についてその値を計算しながら最小値を計算することで答えが得られます。円をつくる方法は何通りあるか、という問題です。円になっているかチェックするという方法で間に合います。コードは以下のようになります。0;}中級テクニック500円玉と100円玉を使う枚数を決めた時点で、使うべき50円玉の枚数が確定するので、3つ目のループは実は不要です。500円玉と100円玉を指定数使ったときの残額について、「残額が正、50の倍数、50C以下」を満たせばansが1増えます。0;}もっと計算をすると、2番目のループも不要になります。500円玉を払ったあとの残金の払い方について、「100円玉をできる限り多く使う方法」と「100円玉をできる限り少なく使う方法」が分かれば、その間の方法でも払えることになるので、パターンの数を簡単に計算できます。今はちょっと面倒なのでやりませんが。以下であるものの総和を出力します。まで全部見て桁和を計算して、条件を満たす場合に足せばいいです。桁和は、「10で割ったあまり(一の位)を足す」「10で割る(切り捨て)」を繰り返せば得られます。今回は、「1からNまでループ」をしたいので、0ではない好きな値から始められるループを用意してみましょう。i++)としています。範囲を設定できるという意味で。いうことで、コードはこんな感じ。Two数列が与えられるので、2人で交互に、合計が大きくなるように数を取っていきます。このとき、先手と後手の得点差はいくらになるでしょう、という問題です。試してみると分かると思いますが、常に「残っている数のうち最大のものを取る」という方策が最善です。いうことで、両者が最適な行動をとったとき、「大きい順に交互に取っていく」という動きになります。したがって、vectorのソートが必要になります。ソートして、大きい順に交互に割り振っていきます。C++では、vectorのソートにはsort()が使えます。<algorithm>というヘッダをincludeしましょう。sortの中身は、ソートする範囲の始点と終点を表すものを入れます。a.end());とすると、昇順(小さい順)にソートされます。今回は降順(大きい順)にソートしたいです。a.rend());とします。0;}中級テクニック?変な書き方でコード量を減らせます。これでうまくいくか考えてみるのも面白いかもしれません。ソートが昇順(小さい順)であることに注意。Mochi数列が与えられるので、そこからいくつか選んで好きに並べ替えて「だんだん小さくなる」ように並べるときの、作れる列の最大長を出力します。要は、「同じ数が無いように選ぶ」ということです。したがって、「数列に含まれる、相異なる数の個数」を出力すれば大丈夫です。値は1〜100なので、1〜100について「あるかないか」を記録すれば大丈夫です。長さ101の、0で埋められた配列が得られるので、存在するものを1にして、最後に1の個数を見ればよいです。(101にしているのは、exist[100]を許容するためです)existについて、あれば1、なければ0としているので、1の数を数えるときに、単純にexistの値を合計するだけで解けます。