- ベストアンサー
最後の数は?
- n個の数を並べ、3つめの数ごとに消していき、最後に残る数はいくつか?この問題の解き方を思い出せません。
- 既存のBasicプログラムを参考にして解き方を考えましたが、なぜこのような解き方になったかわかりません。
- 解答方法に関するアドバイスを求めています。基本的なプログラムのロジックを活かした方法が理想です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ようやく判りました(激遅 「最後に残る数はいくつか」 というのはミスディレクション(ひっかけ)で、 「最後に消える数はいくつか」 を考えると良いようです。 例えば、a=5のとき、 第12カウントで「2」が消えた時点で最後に残る数「4」が決まりますが、「4」が消えるまでカウントするとします。 最初にa個の数があって、3カウント毎に1減り、最終的に0個になるので、総カウント数は3*aになります。 これが最初のNです。 さて、例えば、a=5のときどのようにカウントするかを列挙すると、 数列A:1,2,3,4,5,1,2,4,5,2,4,2,4,4,4 となります。 プログラムが表示する、 15,14,13,11,8,4 という数列は、数列Aにおける最後に消える数「4」の位置を表しています。 プログラムは、これを使って右から、最後に消える数の位置を計算しているのです。 …大雑把で申し訳ありませんが、終業時間になりましたので、とりあえず方針だけ。
その他の回答 (3)
あ、ごめんなさい。剰余系云々の話はなし(滝汗
…ですね。 そういう解釈でよければ、 これは一般に「継子立て」と呼ばれる問題になります。 (「継子立て」・「継子立」で検索すると多少ページがあります) 継子立ての解法は、たしか、剰余系ごとに取り除いていって、それから、え~っとぉ、ツメが良く判りません(ぉぃ プログラムが何やってるかもいまだ不明です。 もう少し考えてみますので、しばらくお待ちを(汗 (その前に別の方から回答がつくかも…)
課題の解釈、違いません?? “例”のように解釈すると、nがどんな値でも2が残ると思うのですが…。 一方、プログラムの方は、例えばnが6のとき1を返します…と思います(ぉぃ
補足
はい、まちがえました(-_-; えっと5個の数1.2.3.4.5として fir→1.2.(3).4.5 「3が消えます。」 sec→(1).2.4.5 「firの3から数えて3つめなので1が消えます。」 thi→2.4.(5) for→(2).4 で、答えが4…と(-_-;) >一方、プログラムの方は、例えばnが6のとき1を返します…と思います そう、nが6のときは1であってます。この解釈の仕方が知りたかったのです。ほんとスイマセン(-_-;)
お礼
遅くなって申し訳ありません。ありがとうございます m(_ _)m えっと…なんとなくですが理解できたので、 似たような例をいくつか解いてみて、 あとは自己解決できるようにしたいと思います ありがとうございました☆