请问哪里不对?

请问哪里不对?

<!DOCTYPE html>

<html>


<head lang="en">

    <meta charset="UTF-8">

    <title>练习</title>

</head>


<body>

    <script type="text/javascript">

        var sum=0;

        var n=Number(prompt('请输入数字n的值'));

        for(var i=1i<=ni++){

            num=(n-1)/n;

            num+=i;

        }

        console.log(num);

    </script>

</body>


</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
好帮手慕久久 2021-05-25 13:58:04

同学你好,不可以的,因为n是定值。假如我们在输入框中输入“3”,那么n就是固定的3,如果使用n/n+1,代码如下:

http://img1.sycdn.imooc.com//climg/60ac8fcb091ab47505830170.jpg

for循环执行过程如下:

初始时i=1,sum=初始时的sum+n/(n+1)=0+3/4=3/4(初始sum是0,n是3)。

当i=2时,sum=上一次的sum+n/(n+1)=3/4  +  3/4(上一次sum是3/4,n是3

当i=3时,sum=上一次的sum+n/(n+1)=(3/4  +  3/4) +   3/4  (上一次sum是3/4  +  3/4,n是3)。

即当输入3时,上述代码得到的sum=3/4  +  3/4 +   3/4  ,而我们想要的结果是n是3时,sum=1+1/2+2/3,结果不同,所以不能使用n/(n+1)。

祝学习愉快!

好帮手慕久久 2021-05-21 18:17:44

同学你好,老师给你换个思路,看同学能否理解:

我们的目的是求出“1+1/2+2/3+3/4+4/5...n-1/n”这样一个式子:

http://img1.sycdn.imooc.com//climg/60a77f1f0955c75806140098.jpg

当在输入框中输入3时,式子中的n就是3,最终的式子就是:1+1/2+2/3。

此时可以将1+1/2+2/3拆成如下两部分的和,这样实现起来会更简单些:

http://img1.sycdn.imooc.com//climg/60a77f7b09ed403c05720113.jpg

即对应如下代码:

http://img1.sycdn.imooc.com//climg/60a7808609350cf306920363.jpg

代码执行过程如下:

当输入的n是3时,在for循环中,i从1开始:

i等于1时,sum等于初始值加上(i-1)/1,即sum=0+(1-1)/1=0/1

当i等于2时,sum等于上一步的sum(i等于1是的sum),加上(i-1)/i,即sum= 0/1  +  (2-1)/2=0/1+1/2 ,由于0/1的结果是0,不影响最终结果,可以去掉,因此当i等于2时,sum=1/2

当i等于3时,sum等于i=2时的sum,加上(i-1)/i,即sum= 1/2+(3-1)/3=1/2+2/3。此时for循环结束,sum的值正好对应最终结果中的后半部分:

http://img1.sycdn.imooc.com//climg/60a7816a093c593a03840082.jpg

只要再加上1就是最终结果,所以最后要给sum加1:

http://img1.sycdn.imooc.com//climg/60a7818f093e830f06560416.jpg

祝学习愉快!

  • 提问者 神知 #1

    sum+=n/(n+1);

    老师这里这样写可以吗?不写成i-1

    2021-05-25 13:12:25
好帮手慕言 2021-05-16 12:03:06

同学你好,如果不加1,得到的结果为1.1666666666666665,是不符合编程题效果的,加1就符合了。

具体执行过程,可以再看下老师的第一次回复。

祝学习愉快~

  • 提问者 神知 #1

    1.1666666666666665这个数是哪里得出的,我还是不懂为什么+1

    2021-05-21 16:43:17
好帮手慕慕子 2021-03-21 10:51:32

同学你好,因为n表示你输入的值,如果此时n=3, 那么直接写成sum += ((n-1)/n),循环三次,都是对 (3-1)/3,即:对2/3这个值进行累加,不符合要求,所以不可以使用n来进行计算。

祝学习愉快~

  • 提问者 神知 #1

    老师最后输出那里sum为什么还要+1

    2021-05-15 21:57:46
好帮手慕言 2021-03-20 16:02:44

同学你好,按照同学所写的代码,执行过程如下:

 以输入3为例(小数位多的话,计算机计算的结果可能会存在误差):

 第一次循环:3-1 = 2,2/3 = 0.6666666666666666,再+1,得到的结果为1.6666666666666665

 第二次循环:3-1 = 2,2/3 = 0.6666666666666666,第一次的结果再+1,得到的结果为2.6666666666666665

 第三次循环:3-1 = 2,2/3 = 0.6666666666666666,第二次的结果再+1,得到的结果为3.6666666666666665

当输入3时:正确的sum应该是“1+1/2+2/3”=2.1666666666666665,你的代码算出的结果和要求不一样,所以是不对的。

同学的代码中定义了sum,结果赋值给sum即可,修改如下:

http://img1.sycdn.imooc.com//climg/6055aa4a0905708305680204.jpg

执行过程如下:

以输入3为例:

第一次循环:1-1 = 0,0/1 = 0,sum的值为0

第二次循环:2-1 = 1,1/2= 0.5,sum的值为0.5

第三次循环:3-1=2,2/3 = 0.6666666666666666,sum的值为0.5+0.6666666666666666 = 1.1666666666666665

结果再加1,得到的结果为2.1666666666666665

祝学习愉快~

  • 提问者 神知 #1

    sum+=((i-1)/i)

    为什么这里是i不是n

    2021-03-20 21:34:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师