Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Visual Basic:如何显示一组字符中的某些值_Vb.net - Fatal编程技术网

Vb.net Visual Basic:如何显示一组字符中的某些值

Vb.net Visual Basic:如何显示一组字符中的某些值,vb.net,Vb.net,在这里,我们找到具有最高和的八个相邻数字,并显示该和。我们还需要让它显示八个相邻的数字,这些数字加起来就是这个值。我被困在如何显示这些值上。到目前为止,我的代码如下: Dim chars As Char() = "73167176531330624919225119674426574742355349194934" & "96983520312774506326239578318016984801869478851843" & "8586156078911294949545950

在这里,我们找到具有最高和的八个相邻数字,并显示该和。我们还需要让它显示八个相邻的数字,这些数字加起来就是这个值。我被困在如何显示这些值上。到目前为止,我的代码如下:

Dim chars As Char() = "73167176531330624919225119674426574742355349194934" &
"96983520312774506326239578318016984801869478851843" &
"85861560789112949495459501737958331952853208805511" &
"12540698747158523863050715693290963295227443043557" &
"66896648950445244523161731856403098711121722383113" &
"62229893423380308135336276614282806444486645238749" &
"30358907296290491560440772390713810515859307960866" &
"70172427121883998797908792274921901699720888093776" &
"65727333001053367881220235421809751254540594752243" &
"52584907711670556013604839586446706324415722155397" &
"53697817977846174064955149290862569321978468622482" &
"83972241375657056057490261407972968652414535100474" &
"82166370484403199890008895243450658541227588666881" &
"16427171479924442928230863465674813919123162824586" &
"17866458359124566529476545682848912883142607690042" &
"24219022671055626321111109370544217506941658960408" &
"07198403850962455444362981230987879927244284909188" &
"84580156166097919133875499200524063689912560717606" &
"05886116467109405077541002256983155200055935729725" &
"71636269561882670428252483600823257530420752963450"
 Dim index As String = 0
    Dim x = 0
    Dim values = Array.ConvertAll(chars, Function(c) CInt(c.ToString()))
    Dim maxSum = 0
    For i = 0 To values.Length - 8
        Dim sum = values(i)
        For x = i + 1 To i + 7
            sum += values(x)
            index = i
        Next
        If sum > maxSum Then
            maxSum = sum
        End If
    Next
    Console.WriteLine(index)
    Console.WriteLine(maxSum)
    Console.Read()
End Sub

以下是我用两种不同的方法对它的看法。第一种方法更为传统,而第二种方法利用LINQ:

Sub Main()
    Dim chunkSize As Integer = 8
    Dim source As String =
        "73167176531330624919225119674426574742355349194934" &
        "96983520312774506326239578318016984801869478851843" &
        "85861560789112949495459501737958331952853208805511" &
        "12540698747158523863050715693290963295227443043557" &
        "66896648950445244523161731856403098711121722383113" &
        "62229893423380308135336276614282806444486645238749" &
        "30358907296290491560440772390713810515859307960866" &
        "70172427121883998797908792274921901699720888093776" &
        "65727333001053367881220235421809751254540594752243" &
        "52584907711670556013604839586446706324415722155397" &
        "53697817977846174064955149290862569321978468622482" &
        "83972241375657056057490261407972968652414535100474" &
        "82166370484403199890008895243450658541227588666881" &
        "16427171479924442928230863465674813919123162824586" &
        "17866458359124566529476545682848912883142607690042" &
        "24219022671055626321111109370544217506941658960408" &
        "07198403850962455444362981230987879927244284909188" &
        "84580156166097919133875499200524063689912560717606" &
        "05886116467109405077541002256983155200055935729725" &
        "71636269561882670428252483600823257530420752963450"

    Dim strChunk As String
    Dim strMaxChunk As String = ""
    Dim curSum, MaxSum As Integer
    Dim values() As Integer
    For i As Integer = 0 To source.Length - chunkSize
        strChunk = source.Substring(i, chunkSize)
        values = Array.ConvertAll(strChunk.ToCharArray, Function(c) CInt(c.ToString()))
        curSum = values.Sum
        If curSum > MaxSum Then
            MaxSum = curSum
            strMaxChunk = strChunk
        End If
    Next
    Console.WriteLine("Traditional")
    Console.WriteLine("Max Sum = " & MaxSum & " from " & strMaxChunk)

    Dim sums = From chunk In Enumerable.Range(0, source.Length - chunkSize).Select(Function(x) source.Substring(x, chunkSize))
               Select chunk, sum = Array.ConvertAll(chunk.ToCharArray, Function(y) CInt(CStr(y))).Sum
               Order By sum Descending

    Dim linqResult = sums.First
    Console.WriteLine("Linq")
    Console.WriteLine("Max Sum = " & linqResult.sum & " from " & linqResult.chunk)

    Console.ReadLine()
End Sub

vb.net不是VBA您需要将
index=i
从您拥有它的位置(在内部循环中)移动到
maxSum=sum
之后(当您找到新的最大和时)。我尝试了,它显示了353,不确定为什么。从技术上讲,第一种方法还在
values.sum
行使用LINQ,但这很容易被传统的循环所取代。我昨天看到了这个,但很忙。我会采用转换子字符串块的“传统”方法。我将这两个解决方案都放入函数中,这些函数将StopWatch.appeased.totalmillizes返回到数组中进行平均。在每次迭代100次时,传统方法的速度要快30%。