问题描述
我正在考虑循环算法,但是我变得更加困惑。
以下是仅包含4个项目的示例
items[]: [
"item1": 100,"item2": 0,"item3": 0,"item4": 0,]
基本上,我必须在4个项目中分配100。总数必须始终为100,但每个项目都必须具有整数,不能具有浮点数。
items[]: [
"item1": 50,"item2": 17,"item3": 17,"item4": 16,]
items[]: [
"item1": 27,"item3": 40,]
如果添加了一个新项目并为其分配了值10,则总和超过110,这使我们超出了10。另外10个必须取自其他项目10 / 4 = 2.5
,因此我们将2.5舍入为3并按如下方式分发:
items[]: [
"item1": 27,(27 - 3)
"item2": 17,(17 - 3)
"item3": 40,(40 - 3)
"item4": 16,(16 - 1)
"item5": 10,]
结果将是以下内容:总数必须为100
items[]: [
"item1": 24,"item2": 14,"item3": 37,"item4": 15,"item5": 10,]
items[]: [
"item1": 24,**"item4": 16,**
"item5": 10,]
结果1将从第一项中扣除:
items[]: [
"item1": 23,]
我不擅长JavaScript,如果有人可以向我展示代码示例,我将不胜感激,如果还不够,请告诉我,我会举更多示例
解决方法
首先分割成相等的部分,然后将余值添加到一个项目中,该怎么办? (或类似的东西)
const items = (input,num = 4) => {
const rem = input % num;
const val = Math.floor(input / num);
return Array.from({ length: num },(_,i) => (!i ? (val + rem) : val));
};
console.log(items(101));
console.log(items(160));
console.log(items(25));
,
这就是我想要的:
$string = "ABBGAACCE";
$stringArray = str_split($string);
$countArr = array_count_values($stringArray);
$singleton = array_filter($countArr,function($elem){return $elem==1;});
print_r(array_keys($singleton)[0]);
function* splitNParts(num,parts) {
let sumParts = 0;
for (let i = 0; i < parts - 1; i++) {
const pn = Math.ceil(0.5 * (num - sumParts))
yield pn
sumParts += pn
}
yield num - sumParts;
}