您好如何将间隔划分成相等的部分示例:
[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,但我需要的算法在任何郎使用它。
谢谢 。
这里是一个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
@ 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 ]