0

私は 3 を持ってい<inputs type="number">ます。それらをa、b、およびcと呼びましょう。デフォルトでは、a、b、および c はすべて 12 です。

a+b+c の合計を表示する出力があります。これを d と呼びましょう。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 減らしました。ユーザーは、選択したとおりに分割された a、b、または c に 12 を追加する可能性があります。

この目標を達成するために、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 に答える