LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1842|回复: 11

10加1,一直加到100,是多少?

[复制链接]
发表于 2009-9-15 11:47:51 | 显示全部楼层 |阅读模式
在书上看到了个例子,是关于函数的,可我对结果有点疑问。
1 #!/bin/sh
  2 #filename:sum_function2.sh
  3 sum ()
  4 {
  5         if (( $#==0 )); then
  6         from=1;to=100
  7         elif (( $#==1 )); then
  8         from=1;to=$1
  9         elif (( $#==2 )); then
10         from=$1;to=$2
11         else
12         echo Erroe!
13         return 1
14         fi
15 i=$from;s=$from
16 while (( $i < $to )); do
17         let "i=$i+1"
18         let "s=$s+$i"
19 done
20 echo sum\($from..$to\)=$s
21 }
22
23 sum
24 sum 10
25 sum 10 100
26 sum 1 2 3

运行的结果是:
sum(1..100)=5050
sum(1..10)=55
sum(10..100)=5005
Erroe!

前两个答案和最后一个都是合理的,唯独10加到100,按网上的求和公式:
(首数+末数)*项数/2
10加到100 ,就应该是 (10+100)*90/2=4950,可我的程序算的是5005,这个是怎么回事?我哪里些错了?可前两个加的结果是正确的
发表于 2009-9-15 11:57:34 | 显示全部楼层
10到19是10项,10到99是90项,10到100是91项
(10+100)*91/2=5005
没错
回复 支持 反对

使用道具 举报

发表于 2009-9-15 15:48:03 | 显示全部楼层
我也没搞明白,为什么sum(10..10)的结果是10,按网上的求和公式:
(首数+末数)*项数/2
10加到10,就应该是(10+10)*(10-10)/2=0,可你的程序算的是10,这个是怎么回事?我哪里写错了?

XD
回复 支持 反对

使用道具 举报

发表于 2009-9-15 21:32:54 | 显示全部楼层
Post by Jockey;2027062
我也没搞明白,为什么sum(10..10)的结果是10,按网上的求和公式:
(首数+末数)*项数/2
10加到10,就应该是(10+10)*(10-10)/2=0,可你的程序算的是10,这个是怎么回事?你哪里写错了?

XD


。。。。。。。。。。。。
(10+10)*1/2=10
项数为1!!!!!:yun:
回复 支持 反对

使用道具 举报

发表于 2009-9-15 22:12:11 | 显示全部楼层
LS应该保持队形,不要那么没幽默感... -.-
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-16 09:23:25 | 显示全部楼层
谢谢2楼的指点,另外请不要拿你的幽默感来显示你技术上的高低。谁都有犯错的时候和不明白的问题,我来这里提问是相信这里的网友都是热心人,不是给某些人机会来显示你的幽默感的。
回复 支持 反对

使用道具 举报

发表于 2009-9-16 11:00:20 | 显示全部楼层
消消火,这个问题是你自己的粗心和“想当然”造成的,不是什么高技术
过程比结果更重要,记忆深刻点不是坏事
回复 支持 反对

使用道具 举报

发表于 2009-9-16 14:39:12 | 显示全部楼层
我可是很深刻地指出了,解决问题的一个思路是从简单案例出发,再向一般化推广...
回复 支持 反对

使用道具 举报

发表于 2009-9-16 15:37:23 | 显示全部楼层
严肃或幽默只是个人态度,相信也没有针对什么人,但还是减少些矛盾的好。毕竟这里人也不多,毕竟来这也是解决问题,而不是争一时意气。
回复 支持 反对

使用道具 举报

发表于 2009-10-17 23:02:08 | 显示全部楼层
Post by Jockey;2027062
我也没搞明白,为什么sum(10..10)的结果是10,按网上的求和公式:
(首数+末数)*项数/2
10加到10,就应该是(10+10)*(10-10)/2=0,可你的程序算的是10,这个是怎么回事?我哪里写错了?

XD

项数不是简单地=尾项数值本身-首项数值本身
(首项+尾项)项数/2是一个等差数列和公式。
一个公差为0的数列10,10,10,10,10项数是5,和=50
---------------
不好意思,4楼已经提到了。重复了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表