根据实践课程的问题是:
编写一个JavaScript程序以找到最大整数n,以使(1 + 2 + ... + n <=给定整数)为true。例如。如果给定的整数为10,则最大整数n的值为4,因此1 + 2 + 3 + 4 <= 10为真。您的输出代码应采用console.log(“ n的值为is,variableName)
格式。
我的代码是:
var num = prompt("Enter a number");
function test(x) {
var sum = 1,
n = 1,
a = 0;
while (sum <= x) {
sum += n;
n = n + 1;
a += 1;
}
return a;
}
var output = test(num);
console.log("Result is :", output);
根据输入的测试用例,我得到的输出正确(10-4、15-5、16-6、17-6),但是网站上说程序有问题。>
我在做什么错了?
答案 0 :(得分:2)
比循环更好的答案:利用数学。以Triangular number formula开头:
1 + 2 + ... + n = n * (n + 1) / 2
因此,对于输入x
,您需要找到n
这样
n * (n + 1) / 2 <= x
要解决此问题,我们需要清除不等式,然后使用quadratic equation formula:
n^2 + n <= 2x
n^2 + n - 2x <= 0
n <= (-1 + sqrt(1 + 8x)) / 2
作为最终解决方案。例如为
x = 10: n <= (-1 + sqrt(81)) / 2; n <= 4
x = 16: n <= (-1 + sqrt(128)) / 2; n <= 5.156854249492381
向下舍入上限,您将拥有最大的允许整数。翻译成JavaScript:
function test(x) {
return Math.floor((Math.sqrt(8 * x + 1) - 1) / 2);
}
var num = prompt("Enter a number");
console.log("Result is :", test(num));
答案 1 :(得分:1)
请考虑传递的值是否为11。然后,最大整数- name: example copying file with owner and permissions
copy:
src: myscript.ps1
dest: myscript.ps1
- name: Run ps1 script in privileged mode
hosts: "{{ my_hosts }}"
become_method: runas
vars:
ansible_become_password: passwordhere
tasks:
- win_shell: '.\myscript.ps1'
become: yes
become_user: Administrator
- name: Create new user
win_user:
name: someuser
password: somepassword
state: present
groups:
- Users
应该为4,因为n
为true,而1+2+3+4 < 11
为false。您的当前代码在输入11时输出5,但这是不正确的;您的1+2+3+4+5 < 11
循环有时会超出while
。
您还需要初始化sum
,使其开始于0,而不是1。
从sum
中减去一个,然后返回:
a
答案 2 :(得分:0)
我认为这对您有用:
var num = prompt("Enter a number");
function test(x) {
var sum = 1,
n = 0;
while ((sum+n) <= x) {
n = n + 1;
sum += n;
}
return n;
}
var output = test(num);
console.log("Result is :", output);
答案 3 :(得分:0)
以下代码应为您工作。基本上,我所做的是,如果输入为10,而您的总和为9,则仍然会进入while循环。然后它将再次加n,现在您的数字大于输入的数字(是10),但是您仍然返回它。我在这里所做的是,在while循环结束时,如果您的总和大于输入,请从a中减去1。这样,它仍然可以执行,但可以解决问题。
我还注意到另一个错误是总和从1开始,n从1开始。您想要1 + 2 + 3 + ... + n,但是使用先前的方法,您得到1 + 1 + 2 + 3 + ... + n。
var num = prompt("Enter a number");
function test(x) {
var sum = 0,
n = 1,
tempSum = 1,
a = 0;
while (sum <= x) {
sum += n;
n++;
a++;
if (sum > x) {
a--;
}
}
return a;
}
var output = test(num);
console.log("Result is :", output);
答案 4 :(得分:0)
您的操作顺序有点时髦;您要做的就是添加增量器。 while
错误的情况将确保总和仅超过数字一次。因此,当您返回时,将数字减一:
var num = prompt("Enter a number");
var output = test(num);
console.log("Result is :", output);
function test(num){
let sum = 0
let inc = 0
while(sum<=num)
sum+=++inc
return --inc;
}
答案 5 :(得分:0)
这是代码的简化版本,基本上,我们首先在每次迭代中增加要添加的数字(n
,然后将其添加到包含sum
的变量中。当循环条件的值为false
时,您需要将其递减至n
才能获得值:
var num = prompt("Enter a number");
function test(x)
{
var sum = 0, n = 0;
while (sum <= x)
{
sum += (++n);
}
return --n;
}
var output = test(num);
console.log("Result is :", output);
答案 6 :(得分:0)
尝试以下功能以找到最大数量
function maxNumber(a){
var i=1,sum=0,maxNumber=0;
while(sum<=a) {
sum=sum+i;
if(sum<=a)
{
maxNumber=i;
}
i+=1;
}
return maxNumber;
}
将检查条件sum<=a
加倍以保留以前的循环值,如果不满足条件则意味着当前循环值没有用,因此返回了先前循环的保留值
已测试输出:
答案 7 :(得分:0)
下面将帮助您完成工作。
var num = prompt("Enter a number");
function findMaxNumber(num){
var sum = 0;
var counter = 0;
while(sum < num){
if(sum + counter > num){
break; // Exit loop
}
sum = sum + counter;
counter++;
}
return --counter; // Loop will cause this to be 1 higher than the max int.
}
console.log('Result is: ' + findMaxNumber(num));