• ベストアンサー

にゃんこ先生の自作問題、群数列の公式を作りたい

にゃんこ先生といいます。 数列a[n]があるとします。 それに仕切りをつけ、群数列とします。 第m群には、b[m]個の数字があるとします。 このとき、第p群のq番目の数字はにゃんでしょうか? もとの数列の第r項は、第何群の何番目の数字でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.1

> 第p群のq番目の数字はにゃんでしょうか? 第p群ではなく、第p-1群の最後の数が何番目かを考えます。 「第p-1群最後の数」の次の数が「第p群1番目の数」になります。 第m群の数字の個数はb[m]なので、第1群~第p-1群までの数字の個数は、 Σ(k = 1 ~ p-1) b[k] となります。 とりあえずf(p) = Σ(k = 1 ~ p) b[k]と置きます(Σ(k = 1 ~ p-1) b[k]はf(p-1))。 よって第p-1群最後の数はf(p-1)番目。 第p群1番目の数はf(p-1)+1番目、第p群2番目の数はf(p-1)+2番目、……、 第p群q番目の数はf(p-1)+q番目となるので、求める数字はa[f(p-1)+q]となります。 > もとの数列の第r項は、第何群の何番目の数字でしょうか? タイトルが「公式を作りたい」となっているのですが、これは公式化できない気がします。 f(p) < rを満たす最大のpを探し、f(p) + n = rという関係が成り立つnを見つけます。 この時、a[r]は第p+1群のn番目の数ということになるはずです。

その他の回答 (1)

  • SariGEnNu
  • ベストアンサー率19% (9/46)
回答No.2

プログラミング的には多重配列の問題になると思います。 数列a(n)を仕切ったときの群数列b(m)のl番面をb(m)(l)と書くことにします。 b(m)の項数をx(m)とします。 b(m)(l)=a(Σx(i)(i=1~m-1)+l) という関係が成り立つと思います。 >もとの数列の第r項は、第何群の何番目の数字でしょうか? 与えられたnに対して n>Σx(i)(i=1~m)を満たす最大のmを求めます。 次にl=r-Σx(i)(i=1~m) を求めます。 このときのb(m+1)(l)がa(n)になります。

関連するQ&A

専門家に質問してみよう