Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

FizzBuzz問題を解いてみました、ひねくれてる?

Option Strict On
Imports System.Collections.Generic

Public Class Form1
#If 0 Then
【問題】
1から100までの数を表示するプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、
3と5両方の倍数の場合には「Dozz」とプリントすること。
#End If

    Const Fizz As String = "Fizz"
    Const Factor_Fizz As Integer = 3

    Const Buzz As String = "Buzz"
    Const Factor_Buzz As Integer = 5

    Const Dozz As String = "Dozz"
    Const Factor_Dozz As Integer = Factor_Fizz * Factor_Buzz

    Const Range_F As Integer = 1
    Const Range_T As Integer = 100
    '************
    Private Class factor_vs_string
        Private _i As Integer = Nothing
        Private _str As String = Nothing
        '*
        Public ReadOnly Property I() As Integer
            Get
                Return _i
            End Get
        End Property
        '*
        Public ReadOnly Property STR() As String
            Get
                Return _str
            End Get
        End Property
        '*
        Public Sub New(ByVal i As Integer, ByVal str As String)
            _i = i
            _str = str
        End Sub
    End Class
    '************
    Private 判定 As List(Of factor_vs_string) '判定順の維持
    '************
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        判定 = New List(Of factor_vs_string)
        判定.Add(New factor_vs_string(Factor_Dozz, Dozz))
        判定.Add(New factor_vs_string(Factor_Fizz, Fizz))
        判定.Add(New factor_vs_string(Factor_Buzz, Buzz))

        For i As Integer = Range_F To Range_T
            Console.Write(ans(i) + ",")
        Next
    End Sub
    Private Function ans(ByVal i As Integer) As String
        For Each fs As factor_vs_string In 判定
            If i Mod fs.I = 0 Then Return fs.STR
        Next
        Return i.ToString
    End Function
End Class

投稿日時 : 2007年11月5日 9:42

Feedback

# re: FizzBuzz問題を解いてみました、ひねくれてる? 2007/11/05 11:06 ひろえむ

ひねくれてるというより、やってはいけないコーディングでは(^^;;;;

# re: FizzBuzz問題を解いてみました、ひねくれてる? 2007/11/05 20:23 Pasie,

> Const Factor_Dozz As Integer = Factor_Fizz * Factor_Buzz
二数が3と5で固定ならよいですが、変数だとすると二数の積が必ずしも公倍数ではないので間違いだと思います。^_^;

# re: FizzBuzz問題を解いてみました、ひねくれてる? 2007/11/05 22:57 Ognac

>二数が3と5で固定ならよいですが、変数だとすると二数の積が必ずしも公倍数ではないので間違いだと思います。^_^;
はぁい先生。ご指摘ありがとうございます。
こうですね。.......orz

Dim Factor_Dozz as Integer = gcd(Factor_Fizz, Factor_Buzz)
:::::::::::
Public Function gcd(ByVal a As Integer, ByVal b As Integer) As Integer
Dim temp As Integer = 0
If (a - b) < 0 Then
temp = a
a = b
b = temp
End If
Dim x As Integer
Dim r As Integer
Dim ngcm As Integer
x = a Mod b
If x = 0 Then
ngcm = b
Return ngcm
Else
r = b Mod x
If r = 0 Then
ngcm = x
Else
Do While (r <> 0)
If r = 1 Then
ngcm = 1
Exit Do
Else
temp = x Mod r
If temp = 0 Then
ngcm = r
Exit Do
Else
x = r
r = temp
End If
End If
Loop
End If
Return ngcm
End If
End Function


# FizzBuzz問題再考 2007/11/06 9:02 Ognacの雑感

FizzBuzz問題再考

タイトル
名前
Url
コメント