如何划分的间隔分成相等的部分

问题描述 投票:0回答:2

您好如何将间隔划分成相等的部分示例:

[1-100] divide by 5 part -->

1- [1-20]
2- [21-40]
3- [41-60]
4- [61-80]
5- [81-100]

要么

[1-102] divide by 5 part -->

1- [1-20]
2- [21-40]
3- [41-60]
4- [61-80]
5- [81-100]
6- [100-102]*

我尝试了代码,但有时工作和其他NUMS没有工作,因为它必须这是我做(我知道我在数学周:P,I 2周前编写它,现在我不知道我怎么做它:d )


Func vall($a , $b)
    Local $inval = ''
    $all  = $a
    $c    = $b ; - 1

    $evv  = Int($all/$c)
    $rrt  = Int($all/$evv)

    $trtr = $evv
    $ee   = 1
    $fg   = 0

    If Mod($a,$evv) == 0 Then
        For $ll = 1 To $rrt ; $all
            If $ll = $rrt Then
                $inval = $inval & $ee & ':-:' & $trtr
            Else
                $inval = $inval & $ee & ':-:' & $trtr &','
            EndIf

            $ee   = $ee   + $evv
            $trtr = $trtr + $evv
        Next
    Else
        For $ll = 1 To $rrt ; $all
            $inval = $inval & $ee & ':-:' & $trtr &','
            $ee    = $ee   + $evv
            $trtr  = $trtr + $evv
        Next
        $uu    = $trtr - $evv + 1
        $inval = $inval & $uu & ':-:' & $all
    EndIf

    Return $inval
EndFunc

我使用了AutoIt,但我需要的算法在任何郎使用它。

谢谢 。

algorithm math autoit
2个回答
0
投票

这里是一个Python实现这是很容易理解的。

def divide(number, parts):
    '''number is the last number of the range and parts is no. of intervals you
        want to make'''
    chunksize = number//parts             # size of each interval
    chunkstart = 1                        # start of interval
    chunkend = chunkstart + chunksize -1  # end of that interval
    while chunkstart < number:            # don't go beyond the range
        if chunkend > number:             # interval end is beyond the range
            print chunkstart, number
            break                         # we are beyond the range now
        print chunkstart, chunkend
        chunkstart += chunksize           # take me to beginning of next interval
        chunkend += chunksize             # also tell me where to end that

Sample Input and Ouputs

divide(100, 5)
1 20
21 40
41 60
61 80
81 100

divide(102, 5)
1 20
21 40
41 60
61 80
81 100
101 102

0
投票

@ pulkit-戈亚尔如u说,我做了同样的分析[代码帮助我理解它是如何工作后,所有的数学是甜蜜的:d],所以我得到的是得到正确的结果,最好的办法是改变零部件和测试部分1和部分+ 1,直到它得到的最好的部分

我煮一个简单的代码:

$number = 57
$parts  = 30
$yy     = 0
$yusf   = 0

ConsoleWrite('number :' & $number & ' | parts : ' & $parts & @CRLF)
$partsplus  = $parts
$partsmoins = $parts

If Mod($number, $parts) > Int($number / $parts ) Then
    While $yusf = 0
        $partsplus  += 1
        $partsmoins -= 1

        If Mod($number, $partsplus) < Int($number / $partsplus ) Then
            ConsoleWrite("old part : " & $parts & "| new part :" & $partsplus & " | interval : " & Int($number / $partsplus ) & @CRLF)
            $parts = $partsplus
            $yusf  = 1
        ElseIf Mod($number, $partsmoins) < Int($number / $partsmoins ) Then
            ConsoleWrite("old part : " & $parts & "| new part :" & $partsmoins & " | interval : " & Int($number / $partsmoins  ) & @CRLF)
            $parts = $partsmoins
            $yusf  = 1
        EndIf
    WEnd
EndIf

$chunksize  = Int($number / $parts )      ; size of each interval
$chunkstart = 1                           ; start of interval
$chunkend   = $chunkstart + $chunksize -1 ; end of that interval

While $chunkstart <= $number              ; don't go beyond the range
    If $chunkend > $number Then           ; interval end is beyond the range
        ; print $chunkstart, $number
        ConsoleWrite("[ " & $chunkstart & " : " & $number & " ]*" & @CRLF)
        ExitLoop
    EndIf

    ; we are beyond the range now
    ConsoleWrite("[ " & $chunkstart & " : " & $chunkend & " ]" & @CRLF)
    $yy         += 1
    $chunkstart += $chunksize             ; take me to beginning of next interval
    $chunkend   += $chunksize             ; also tell me where to end that
WEnd

一些测试的57 - 30,30改为28有好结果

number :57 | parts : 30
old part : 30| new part :28 | interval : 2
[ 1 : 2 ]
[ 3 : 4 ]
[ 5 : 6 ]
[ 7 : 8 ]
[ 9 : 10 ]
[ 11 : 12 ]
[ 13 : 14 ]
[ 15 : 16 ]
[ 17 : 18 ]
[ 19 : 20 ]
[ 21 : 22 ]
[ 23 : 24 ]
[ 25 : 26 ]
[ 27 : 28 ]
[ 29 : 30 ]
[ 31 : 32 ]
[ 33 : 34 ]
[ 35 : 36 ]
[ 37 : 38 ]
[ 39 : 40 ]
[ 41 : 42 ]
[ 43 : 44 ]
[ 45 : 46 ]
[ 47 : 48 ]
[ 49 : 50 ]
[ 51 : 52 ]
[ 53 : 54 ]
[ 55 : 56 ]
[ 57 : 57 ]*

7 - 300,300变更为7:d

number :7 | parts : 300
old part : 300| new part :7 | interval : 1
[ 1 : 1 ]
[ 2 : 2 ]
[ 3 : 3 ]
[ 4 : 4 ]
[ 5 : 5 ]
[ 6 : 6 ]
[ 7 : 7 ]

并在10 -2,没有变化的情况下正常

 number :10 | parts : 2
 [ 1 : 5 ]
 [ 6 : 10 ]
© www.soinside.com 2019 - 2024. All rights reserved.