首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同时循环测试用例错误

同时循环测试用例错误
EN

Stack Overflow用户
提问于 2019-02-20 05:25:15
回答 8查看 190关注 0票数 0

根据实习课程,问题是:

编写一个JavaScript程序以求最大整数n,使(1 +2+.+n <=给定整数)为真。就像。如果给定的整数为10,则最大整数n的值为4,因此1+2+3+4 <= 10为真。输出代码应采用console.log格式(“值n is ",variableName)

我的代码是:

代码语言:javascript
运行
复制
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),我得到了正确的输出,但是网站上说程序有问题。

我做错什么了?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2019-02-20 05:40:21

最好的答案比循环:利用数学。从三角数公式开始

代码语言:javascript
运行
复制
1 + 2 + ... + n = n * (n + 1) / 2

因此,对于输入x,您需要找到这样的n

代码语言:javascript
运行
复制
n * (n + 1) / 2 <= x

要解决这个问题,我们需要清理不等式,然后使用二次方程公式

代码语言:javascript
运行
复制
n^2 + n <= 2x
n^2 + n - 2x <= 0

n <= (-1 + sqrt(1 + 8x)) / 2

作为最终的解决方案。例如:

代码语言:javascript
运行
复制
x = 10: n <= (-1 + sqrt(81)) / 2; n <= 4
x = 16: n <= (-1 + sqrt(128)) / 2; n <= 5.156854249492381

将上限向下舍入,就会得到最大允许的整数。翻译成JavaScript:

代码语言: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));

票数 2
EN

Stack Overflow用户

发布于 2019-02-20 05:32:13

如果传递的值为11,则最大整数n应为4,因为1+2+3+4 < 11为真,而1+2+3+4+5 < 11为false。但是,当前代码输出的输入为11,这是不正确的;您的while循环有时超出了sum

您还需要初始化sum以从0开始,而不是在1开始。

在返回之前,从a中减去一个:

代码语言:javascript
运行
复制
function test(x) {
  var sum = 0,
    n = 1,
    a = 0;
  while (sum <= x) {
    sum += n;
    n = n + 1;
    a += 1;
    console.log(a, sum);
  }
  return a - 1;
}
console.log(test(10));
console.log(test(11));

var num = prompt("Enter a number");
var output = test(num);
console.log("Result is :", output);

票数 1
EN

Stack Overflow用户

发布于 2019-02-20 05:39:08

我想这对你有用:

代码语言:javascript
运行
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54779358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档