1

曜日ごとに順序付けられた、ゼロ以上の7つの数値があります。最小で1つ、またはすべての値がゼロより大きい場合があります。>0の値がSINGLEシーケンスで発生するかどうかを判断する方法が必要です。

例えば:

0, 8, 8, 0, 0, 0, 0

単一のシーケンスになりますが

8, 0, 8, 8, 8, 0, 0

2つの別個のシーケンスがあるため、資格がありません。また、グループ全体にゼロより大きい値が1つしかない場合は、それを適格なシーケンスと見なしたいと思います。

私は7つの変数を受け取り、それぞれがゼロか非ゼロかを基にブール配列に詰め込む関数から始めました。0の場合はfalse、> 0の場合はtrueで、次のようになります。

{false, true, true, false, false, false, false}

次に、その配列の内容に上記の修飾に従って修飾シーケンスが含まれているかどうかを判断する必要があります。何か案は?

少しでも価値がありますが、これはこれまでの私の機能です。

Public Function IsConcurrent(D1, D2, D3, D4, D5, D6, D7) As Boolean
  Dim arr(6) As Single
  arr(0) = D1
  arr(1) = D2
  arr(2) = D3
  arr(3) = D4
  arr(4) = D5
  arr(5) = D6
  arr(6) = D7

  Dim concurrent As Boolean = False
  If CSng(arr(0)) > 0 Then concurrent = True
  For k = 2 To 7
    If arr(k - 1) = arr(k - 2) Then
    Else
    End If
  Next

  Return concurrent
End Function
4

2 に答える 2

1

LINQソリューションは次のとおりです。コード行が少なく、理解しやすいことを願っています。

Sub Main()
  Dim lst As New List(Of Integer)({0, 8, 8, 0, 0, 0, 0})
  Console.WriteLine(IsConcurrent(lst)) 'True
  lst = New List(Of Integer)({8, 0, 8, 8, 8, 0, 0})
  Console.WriteLine(IsConcurrent(lst)) 'False
  Console.ReadLine()
End Sub

Private Function IsConcurrent(ByVal lst As List(Of Integer)) As Boolean
  Dim elementsAfterZeros = lst.SkipWhile(Function(x) x <= 0)
  If elementsAfterZeros.Count = 0 Then Return False 'we only have zeros
  Dim elementsInSecondGroupOfNonZeros = elementsAfterZeros.
                                        SkipWhile(Function(x) x > 0).
                                        SkipWhile(Function(x) x <= 0)
  If elementsInSecondGroupOfNonZeros.Count = 0 Then Return True
  Return False
End Function
于 2013-02-26T16:12:26.843 に答える
1

Lists...配列ではなくこれを使用して書きましたが、構造は同じになります。

これが私がそれをした方法です:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim x As List(Of Integer) = {0, 0, 8, 8, 8, 0, 0}.ToList

    Dim Test As Boolean = LookForSingleSequence(x)
End Sub


Private Function LookForSingleSequence(ByVal MyList As List(Of Integer)) As Boolean

    Dim i As Integer
    Dim RetVal As Boolean = False
    Dim SeqEnded As Boolean = False

    For i = 0 To MyList.Count - 1
        If MyList(i) > 0 Then
            If SeqEnded = True Then
                RetVal = False
                Exit For
            Else
                RetVal = True
            End If
        End If

        If RetVal = True And MyList(i) <= 0 Then SeqEnded = True
    Next

    Return RetVal

End Function

お役に立てれば!!

于 2013-02-26T15:46:26.720 に答える