• ベストアンサー

私にはできない関数です

最近このコーナーに助けられております。今日朝からずっと取り組んできましたが、私にはできませんでした。数字を分けていく作業です。 数字は49~200までとします。本当は49以下での規則も見つけたいのですが、数字の条件が変わってますますめんどくさくなりそうなので、明らかに規則性が見える49以上でできるものなのかどうかを確認しようとおもっております。数字の区切り方は以下の通りです。 49→7777777(7ずつ7つに区切る) 50→8777777 51→8877777 52→8887777 53→8888777 52→8888877 53→8888887 54→8888888(8で一杯になったら次からは一つ欄を増やす) 55→87777777 56→88777777 57→88877777 58→88887777 59→88888777 60→88888877 61→88888887 62→88888888 63→877777777 64→887777777 65→888777777 66→888877777 67→888887777 68→888888777 69→888888877 70→888888887 71→888888888 このようにして数字を8で一杯になるまで区切っていくのですが、 任意の数字(n)は8が何個で7が何個かを求める式を知りたいのです。どなたか数学の得意な方、頭脳をお貸しください。

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

  • ベストアンサー
noname#47975
noname#47975
回答No.8

任意のnに対して変換するときのアルゴリズムは以下のとおりに なると思います。 (1)(n-49)を8で割った商をA、余りをBとする (2)前に連続して(A+B)個の8を並べる (3)(2)で並べた8の後ろに、連続して(7-B)個の7を並べる。

ityounomi
質問者

お礼

ありがとうございます。難しいものとあきらめていました。ご提示された式に数字を入れてみると、確かに求めたい数が出てきました。でも、どうやってそういう式を導き出せるんですか?すごいですね! 本当にありがとうございました。

その他の回答 (7)

noname#101087
noname#101087
回答No.7

#2 です。 >  n = 7*x+8*y {x, y} のペアについて、解の一意性が保証されてませんね。 まず、   1 = 7*x+8*y について、すぐ見つかる一つの解は {-1, +1} 。 これを n 倍すれば、   n = 7*x+8*y の一解 {-n, +n} 。 これから一般解を作れば、 {-n+8k, +n-7k} (k は任意の整数) になり、非負解の範囲は   7k≦n≦8k に対応する。 n が7*8=56 以上で 7 か 8 の倍数だと、非負解ペアが複数個存在する。 というわけで、どれを選ぶかという別のルールが必要になるのでした。

ityounomi
質問者

お礼

何とか解決することができました。ありがとうございました。また、お世話になりました。心から感謝いたします。

回答No.6

再々度書きます。 但し書きが間違っていました。とかきましたが逆でした。 但し、x:0以上の整数、y:1以上の整数 かつn=49のときのみy=0が許される というのが正しいです。 あとは今まで書いた事を読んでください。

ityounomi
質問者

お礼

ありがとうございました。何とか解決することができました。数学が得なようでうらやましいです。本当にお世話になりました。

回答No.5

何度も書き直してすみません。初めに回答したものです。 >別の方が次の計算式で求められていますが、これも一つの方法だと思います。 >n=7x+8y >但し、x,y:0以上の整数 >となります。x,yが7と8の個数を表しています。 >これは >n=(8-1)x+8y=8(x+y)-x >と表せるために >上の数列的解法に持ち込むと(x+y)が第k-6群になります。(k-6群となっているのは上の数列的解法では第一群を50から56としているからです。) >やっていることは49以下を含めるのか含めないのかということに差が生じています。というのは表の49だけは他の数字の表し方と違い7のみで表される事を許しているからです。(この式ではy=0を用いることができます。) とかきましたが但し書きが間違っていました。 但し、x:1以上の整数、y:0以上の整数 の間違いです。というのは上にも書きましたが、49のみ全てが7で表されているからです。他の数字は必ず8を含んでいます。 49以外の数字を7のみで書く事を許すと56→77777777のような数字も許される事となりルールに反する事になります。 あと表の73が間違っていると書きましたが実際には65以上の数字は間違っています。

回答No.4

>そうすると第k群の最後の数字(8のみで構成される数字)は >49+Σ(7+8+…+(k+6))=49+k(k+13)/2と表されます。 ここですがΣいりません。書き方が間違っていました。 49+(7+8+…+(k+6))=49+Σ(k+6)=49+k(k+13)/2です。 以下あっています。 >よって任意の数字(n)は >50+(k-1)(k+12)/2<=n<=49+k(k+13)/2 >上の条件を満たすとき第k群に属する事がわかります。 >そしてこの群の第何番目かがわかるために8が何個で7が何個か理解で>きると思います。 >第1群のときの8と7の総数は7個、第2群のときの8と7の総数は8個という風に考えると第k群の8と7の総数はk+6個です。またk群の何番目かというのが8の数を表しています。 上記は数列的解法で、エクセルに入れるなら49+k(k+13)/2を式として導入すればすぐに使う事ができます。 別の方が次の計算式で求められていますが、これも一つの方法だと思います。 n=7x+8y 但し、x,y:0以上の整数 となります。x,yが7と8の個数を表しています。 これは n=(8-1)x+8y=8(x+y)-x と表せるために 上の数列的解法に持ち込むと(x+y)が第k-6群になります。(k-6群となっているのは上の数列的解法では第一群を50から56としているからです。) やっていることは49以下を含めるのか含めないのかということに差が生じています。というのは表の49だけは他の数字の表し方と違い7のみで表される事を許しているからです。(この式ではy=0を用いることができます。) 49以下がどのように与えられているのかわかりませんが、全ての任意の整数(n)をエクセルにて表したいというのであれば、この式を使った方が楽だと思われます。 最後に再度書かれた表ですが、73は間違えています。

  • Mr_Holland
  • ベストアンサー率56% (890/1576)
回答No.3

 8ですべて埋め尽くされた次の数は、下7桁がすべて7で、残りの上の桁を8で埋めればよいのですね。(たとえば、73番目は、下7桁が7で、上3桁が8。)  でしたら、エクセルでよければ、次の式で求めることができます。(セルA2に49~200の数字が入っているとします。)   =7777777+(1-10^(-MOD(A2-1,8)))*10^7/9+8/9*(10^(INT((A2-1)/8)-6)-1)*10^7  ただし、この式は数値として扱っていますので、エクセルの有効数字の関係上、121以降は下の桁が丸められてしまい不正確になってしまいます。数値として扱うと不都合がある場合は文字列として扱わなければなりませんので、次の式を使ってください。   =REPT(8,MOD(A2-1,8)+INT((A2-49)/8))&REPT(7,7-MOD(A2-1,8))

ityounomi
質問者

お礼

ありがとうございました。何とか皆さんのお知恵を拝借して解決することができました。本当にお世話になりました。

noname#101087
noname#101087
回答No.2

>任意の数字(n)は8が何個で7が何個かを求める式を知りたいのです。 算術なら不定方程式でしょうね。   n = 7*x+8*y の x, y を求めるわけです。

回答No.1

一応、まず質問なのですが、上の表は間違っていないでしょうか? 52と53が2回出てきているので、そこが間違っていると思われます。 この問題は群数列の問題かと思います。 8だけで構成される数字をまず取り出して考えますと、 56→8888888 64→88888888 73→888888888 83→8888888888 94→88888888888 以下略という風になります。 つまり数字的には (49+7)+8+9+10+…という風になっていきます。 そこで50から56の7個を第一群、57から64の8個を第二群、65から73の9個を第三群という風に考えます。 そうすると第k群の最後の数字(8のみで構成される数字)は 49+Σ(7+8+…+(k+6))=49+k(k+13)/2と表されます。 よって任意の数字(n)は 50+(k-1)(k+12)/2<=n<=49+k(k+13)/2 上の条件を満たすとき第k群に属する事がわかります。 そしてこの群の第何番目かがわかるために8が何個で7が何個か理解できると思います。 第1群のときの8と7の総数は7個、第2群のときの8と7の総数は8個という風に考えると第k群の8と7の総数はk+6個です。またk群の何番目かというのが8の数を表しています。 例えばn=85のとき第5(=k)群の2番目となるため 88777777777となります(8が2個7が9個)

ityounomi
質問者

お礼

申し訳ありませんでした。ご指摘のとおり間違って掲載しておりました。正しいのは以下のとおりです。 49→7777777(7ずつ7つに区切る) 50→8777777 51→8877777 52→8887777 53→8888777 54→8888877 55→8888887 56→8888888(8で一杯になったら次からは一つ欄を増やす) 57→87777777 58→88777777 59→88877777 60→88887777 61→88888777 62→88888877 63→88888887 64→88888888 65→887777777 66→888777777 67→888877777 68→888887777 69→888888777 70→888888877 71→888888887 72→888888888 73→8887777777 このような並びです。エクセルのVBAで処理を考えているのですがかなり難しそうですね。もしお知恵を拝借できる用でしたら、是非よろしくお願いいたします。

関連するQ&A