(1) (2) (3) (4) (5) (6) (7)

Perl 入門 (7)

最終課題:数学・パズルを解こう!

今までに学んだことを使って次の中から3問選びPerlを使って解いて下さい。 解答および用いたスクリプトを印刷して提出して下さい。 複数枚の場合は必ずホッチキスで綴じて下さい。学籍番号・氏名も忘れず記入し、 さらにすべて独力で解いた、問1は自分でできたが、問2と問3は○○君に教えて貰った、 などのように、Honor System にのっとって宣誓して下さい! 締切は1月14日(金)午後5時、提出先は1号館4階山崎研究室ドアポストです。

以下の問題の中には数値に対してその小数点以下の部分を切り捨てて整数値を返す関数 int() を使うと便利なものもあります。例:int(3.141) は 3 になります。int(4) は 4 です。



〔問1〕
数列 a1, a2, a3, …… を次のように定めます:
        a1 = 1
        an = 2 an-1 + 3   (n=2, 3, 4, ……).
an ≧ 10000000 (=107) となる n で最小なものを見つけなさい。 またそのときの an の値も求めなさい。

〔問2〕
数列 a1, a2, a3, …… を次のように定めます:
        a1 = a2 = 1
        an = an-1 + an-2   (n=3, 4, 5, ……).
an ≧ 10000000 (=107) となる n で最小なものを見つけなさい。 またそのときの an の値も求めなさい。

〔問3〕
自然数 n が 1 から 10000 まで変わるとき、8n+1 がある自然数の平方になるような n は全部で何個 ありますか。またそのような n の中で一番大きいものは何ですか。

〔問4〕
コマンドプロンプトで自然数 n を指定して実行すると、その自然数の各桁の数の合計を求めるスクリプトを 作って下さい。
実行例:
I:\nyuumon2>jperl 704.pl 86245
86245 -> 25

I:\nyuumon2>
※自分のスクリプトでどのくらい大きな数までうまく取り扱えるのかも調べてみて下さい。
※指定した自然数を変数$strに格納し、それを文字列としてひとつひとつの数字に分解する ことができます: @digits = split //, $str; で、配列@digitsに各桁の数字が前から順に格納されます。

〔問5〕
コマンドプロンプトで自然数 n を指定して実行すると、その自然数の各桁の数の合計を求め、 さらにその数が2桁以上の数だったら各桁の数の合計を求めるということを続けていき 最終的に1桁の数を出力するスクリプトを作って下さい。 途中の数も表示されるようにして下さい。
実行例:
I:\nyuumon2>jperl 705.pl 86245
86245 -> 25 -> 7

I:\nyuumon2>
※自分のスクリプトでどのくらい大きな数までうまく取り扱えるのかも調べてみて下さい。