我正在尝试尽可能均匀地分割余数,其中var不能被分组到数组中。
我已经尝试了以下内容,它为我提供了对数组项的四舍五入。我正在寻找一种方法来识别余数,然后将其尽可能均匀地分配到每个数组索引值中。
<style>
table {
box-sizing:border-box;
width:460px;
margin:15px;
display:block;
border:double 7px;
padding:10px;
line-height:40px;
}
table tr {
text-align:center;
}
table th {
font-size:20px;
width:100px;
}
table td {
font-size:17px;
}
@media (max-width:768px) {/*Extra-Small Screens*/
table tr th:last-child, table tr td:last-child {
display:none;
}
table {
width:360px;
}
}
@media (max-width:617px) {/*Extra*/
table {
width:300px;
}
}
@media (max-width:536px) {/*Extra*/
table tr th:nth-last-child(2), table tr td:nth-last-child(2) {
display:none;
}
table {
width:170px;
}
}
</style>
例1:
输入:
for n in ${!variableLengthArray[@]} ; do
divideCount=$(( ${variableLengthArray[$n]} / $var ))
variableLengthArray[$n]=$(echo "($divideCount+0.5)/1" | bc )
done
理想输出:
var=11
variableLengthArray[0]=0
variableLengthArray[1]=0
variableLengthArray[2]=0
EXAMPLE2:
输入:
variableLengthArray[0]=4
variableLengthArray[1]=4
variableLengthArray[2]=3
理想输出:
var=33
variableLengthArray[0]=0
variableLengthArray[1]=0
variableLengthArray[2]=0
variableLengthArray[3]=0
variableLengthArray[4]=0
variableLengthArray[5]=0
答案 0 :(得分:1)
您只需要将输入分为输出槽数。 shell只进行整数除法,因此结果将是每个槽中存储的数字。除法的其余部分告诉您有多少个槽获得结果加一个。
作为一个具体的例子,
$ var=11
$ slots=3
$ result=$((var / slots))
$ k=$((var % slots ))
$ for ((i=0; i<k; i++)); do
> variableLengthArray[i]=$(( result + 1 ))
> done
$ for ((i=k; i < slots; i++)); do
> variableLengthArray[i]=$result
> done
答案 1 :(得分:1)
假设您的数组变量的索引从0开始并且是连续的,则以下代码将执行您想要的操作:
n=${#variableLengthArray[@]}
ratio=$(($var / $n))
rem=$(($var % $n))
for i in ${!variableLengthArray[@]} ; do
variableLengthArray[$i]=$(( $ratio + ($i < $rem ? 1 : 0) ))
done