2013-02-25 66 views
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 

這是怎麼開始。要使等於13,用戶必須將b或c減1,然後將1加1。

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

此方案示出了用戶通過12減少B,然後提出了一個由12

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

這一個節目,他們使用12降低a和c,然後通過24

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

用戶將b減少了12.用戶有可能將a,b或c分別加上12,如他們所選。

我可以使用html和/或javascript來實現這個目標。

+4

這感覺就像功課。 – 2013-02-25 04:20:00

+0

是的,這可以解決什麼現實世界的問題? – 2013-02-25 04:22:05

+0

您不能爲a,b或c設置最大值(如果您希望以任何方式設置36,因爲您可以放置​​a = 36,b = 0和c = 0) – 2013-02-25 04:23:51

回答

0

首先,你應該最大爲A,B和C設置爲36

然後,你需要使用onchange事件,以確保一個當你改變他們影響其他。

例如:

若a = 20,B = 10,C = 6,則d = 36

如果增加C,使之如圖7所示,那麼應該成爲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;} 
     } 

    } 
} 

DEMO

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