Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  206  : 記事  0  : コメント  838  : トラックバック  43

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板
フィードメーター - Mr.Tの場所

書庫

日記カテゴリ

Mr.Tです、こんにちは。

前回のアルゴリズムの続きです。前回1~45まで、流れを作りましたね。
実は、すでに答えがわかっているので、プログラムに落とし込むのは、1~45までの順番に書いていけば
答えはでます。

VB.NET コンソールアプリで、書いていくとこんな感じです。

Option Explicit On
Option Strict On
Module Module1

    '1.今から登ります。
    Sub Main()

        Dim 日にち As Integer
        Dim 合計距離 As Integer

        Dim 登った距離 As Integer

        '2.まだ、0mです。
        登った距離 = 0

        '3.1日目。
        日にち = 1

        '4.昼間3m登る。今は、3mの場所にいます。
        登った距離 = 3

        '5.まだ、10mを超えてません
        If 登った距離 < 10 Then
            '6.夜2m落ちる。
            登った距離 = 3 - 2

            '7.合計1m。
            合計距離 = 1

            '8.2日目。
            日にち = 2

            '9.昼間3メートル登る。今は、4mの場所にいます。
            登った距離 = 1 + 3

            '10.まだ、10mを超えてません。
            If 登った距離 < 10 Then

                '11.夜2m落ちる。
                登った距離 = 4 - 2
                '12.合計2m。
                合計距離 = 2

                '....こういう処理がずっと続きます

            End If
        End If
    End Sub
End Module

さて、今回の一番重要な、アルゴリズムという視点からどこが重要なのかというと、「5.まだ10mを超えていません」のような部分です。

if 登った距離<10 then

(....処理)

end if

5番では、登った距離が10mでなければ、6番以降の計算を全部含まなくてはいけない
10番では、登った距離が10mでなければ、11番以降の計算を全部含まなくてはいけない
15番では、登った距離が10mでなければ、16番以降の計算を全部含まなくてはいけない
20番では、登った距離が10mでなければ、21番以降の計算を全部含まなくてはいけない

....

図にすると、こんな感じです。
20071111001

※へたくそなのは、ゆるしてね。一応、全部円と考えてみてください。

これが、今回のアルゴリズムです。
こうやって、丸の中に丸がすっぽりと入りこむ場合で、それが何度も何度も出てくる場合には、
「ループ処理」がぴったり合います。

ループ処理はその書き方が色々ありますが、丸が中にはいるようになるのは、10メートルを超えたのか?という
ことを何度も比較できるものがよさそうです。

で、ループの中で、何度も何度も計算を繰り返すわけですから、似たような計算をしているところがないか
考えて見ます。

3番 8番 13番 18番 23番 28番 33番 38番 43番
4番 9番 14番 19番 24番 29番 34番 39番 44番
5番 10番 15番 20番 25番 30番 35番 40番
6番 11番 16番 20番 26番 31番 36番 41番

 行単位でみると、3,8,13...の番号は、日にちを数える計算ですね。
4、9、14...は、昼間3メートル登る計算をして、昼間に登った距離を求める計算ですね。

このように規則性があることをわかってください。

では、実際にループを描いてみます。 

While (登った距離 <= 10)


(ループの中)



End While 

 これが、ループ処理ですね。登った距離が10m未満だったら、ぐるぐる回ってループの中で毎回同じことをします。
では、そのループの中で何をするんでしょう?

まずは、1番から順に見ていきましょう。

1番は、「これから登ります」ですね。これをループの中にいれると、登った距離が10m未満の場合、毎回「これから登ります」
となります。おかしいですね。1番の「これから登ります」は1回しか出てきません。

なので、これはループの外です。

2番は、「まだ、0mです」です。これは、なぜ0mなんでしょう?まだ登ってないからですね。つまり、登った距離が10m未満だからです。
これは、ループの条件にある「登った距離<10」で判断するのと一緒ですね。

つまり、2番は、5番、10番、15番、...と一緒の処理なわけです。

3番は、日にちの計算ですが、同じような処理が、8番、13番、...と続きます。
それも、1日、2日、3日と、一日ずつ増えていきます。これは、ループ処理ですね。

では、

While (登った距離 <= 10)

   日にち = 日にち + 1

(ループの中)

End While

 これで、日にちが一日ずつ変わっていくことになります。

では、次。登った距離を考えます。日にちの計算と一緒で、3mが昼間登れる距離なので、

登った距離 = 登った距離 + 3

ですね。

次回に、続きます。

投稿日時 : 2007年11月11日 2:50

コメント

# アルゴリズム(3) 2007/11/14 15:35 Mr.Tの場所
アルゴリズム(3)

Post Feedback

タイトル
名前
Url:
コメント