我有3 <inputs type="number">
。让我们称他们为a,b和c。默认情况下,a,b和c都是12。
我有一个输出,我们称之为d,显示a + b + c的总和。 d不应该超过36.如何设置a,b和c的“max”值使总和等于36。
一些例子:
a=12, b=12, c=12, d=36
这就是它的开始。要使等于13,用户必须将b或c减1,然后将1减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来实现这一目标。
答案 0 :(得分: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;}
}
}
}
答案 1 :(得分: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);
};