0

我有 3 个<inputs type="number">。让我们称它们为 a、b 和 c。默认情况下,a、b 和 c 都是 12。

我有一个输出,我们称之为 d,它显示 a+b+c 的总数。d 永远不应超过 36。如何设置 a、b 和 c 的“最大值”以使总和等于 36。

一些例子:

a=12, b=12, c=12, d=36

这就是它的开始。要使 a 等于 13,用户必须将 b 或 c 减 1,然后将 a 加 1。

a=24, b=00, c=12, d=36

此场景显示用户将 b 减少 12,然后将 a 增加 12。

a=00, b=36, c=00, d=36

这个节目他们使用将 a 和 c 减少 12,然后将 b 增加 24。

a=12, b=12, c=00, d=24

用户将 b 减少了 12。用户有可能将 12 添加到他们选择的 a、b 或 c 中。

我可以使用 html 和/或 javascript 来实现这个目标。

4

2 回答 2

0
  I am giving you logic.arrange it according to yourself.

    function sol(){
    var a=0,b=0,c=0,n=36;
    a=Math.floor(Math.random()*n);
    if(a==n){
   b=0;
   c=0;
   exit;
   }
   b=Math.floor(Math.random()*n);

  if((a+b)>n){
    sol();
    }
  else if((a+b)==n)
    {
    c=0;
    }
  else
    c=n-(a+b);
    };
于 2013-02-25T05:17:15.853 回答
0

首先,您应该将 a、b 和 c 的最大值设置为 36。

然后,您需要使用该onchange事件来确保在更改它们时一个会影响另一个。

例如:

如果 a = 20,b=10,c=6,则 d=36

如果增加 c,使其变为 7,则 a 应变为 19.5,b 应变为 9.5

HTML

<input type="number" id="a" max="36" value="12" onchange="Stabilized(this)" class="numbers">
<input type="number" id="b" max="36" value="12" onchange="Stabilized(this)" class="numbers">
<input type="number" id="c" max="36" value="12" onchange="Stabilized(this)" class="numbers">
<input type="number" id="d" max="36" value="36">

JavaScript

function Stabilized(e)
{
    var thisNumber = e.value;
    var totalSum=0;
    var i;
    var remainingSum = 36 - parseFloat(thisNumber);
    var numbersList = document.getElementsByClassName("numbers");
    var currentRemainingSum=0;
    var average;
    var y=0;
    var flag1=0;
    var counter=0;
    for (i=0;i<numbersList.length;i++)
    {
        totalSum +=parseFloat(numbersList[i].value);
        if(numbersList[i]!=e)
        {
            y++
            currentRemainingSum = parseFloat(currentRemainingSum) + (parseFloat(numbersList[i].value));
        }
    }
    if((parseFloat(currentRemainingSum))>(parseFloat(remainingSum)))
        {
            average = ((currentRemainingSum-remainingSum)/y);
            while(parseFloat(currentRemainingSum)>parseFloat(remainingSum)){
            for (i=0;i<numbersList.length;i++)
            {
                if(numbersList[i]!=e)
                {
                        if((parseFloat(numbersList[i].value))>=average){
                        numbersList[i].value = (parseFloat(numbersList[i].value) - parseFloat(average));
                        remainingSum=parseFloat(remainingSum)+parseFloat(average);
                        }
                        else
                        {
                            remainingSum=(parseFloat(remainingSum)+(parseFloat(numbersList[i].value)));
                            numbersList[i].value = 0;   
                        }

                }

                if((parseFloat(currentRemainingSum)<=parseFloat(remainingSum))){
                    break;
                    }
            }
        }
    }
    else if((parseFloat(currentRemainingSum))<(parseFloat(remainingSum)))
    {
        average = ((remainingSum-currentRemainingSum)/y)

        for (i=0;i<numbersList.length;i++)
        {

            if(numbersList[i]!=e)
            {
                counter++;
                if(numbersList[i].value==36)
                {
                     flag1++;
                }
                else
                {
                    numbersList[i].value = (parseFloat(numbersList[i].value) + average);
                    remainingSum = remainingSum - average;
                    flag1--;
                }

            }
            if((parseFloat(remainingSum))<=0 || (flag1==counter && numbersList.length==(i+1))){
                break;}
        }

    }
}

演示

于 2013-02-25T04:53:20.170 回答