如何在数组中的项目数之间分配100

问题描述

我正在考虑循环算法,但是我变得更加困惑。

以下是仅包含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,]

这里是另一个示例:我将上一项从第1项增加到第二项。

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; }