如何使用shell对一个范围内的偶数求和?

时间:2014-02-21 01:09:18

标签: bash shell unix

我必须为命令行提取2个参数。第一个参数是起始编号,第二个参数是整数。这是我到目前为止所拥有的。

#!/bin/bash
x=$1
y=$2
z=0
k=$((x%2))
while [ $z -lt $y ]; do
  if [ $k == 0 ]; then
    echo $k
  fi
  x=$((x+1))
  echo $((x+1))
  k=$((x%2))
  z=$((z+1))
done

有没有人可以帮我这个节目,我真的很感激。

2 个答案:

答案 0 :(得分:1)

  1. 确定系列中的第一个和最后一个整数,m和n。
  2. 将m舍入到最接近的偶数整数以生成m'
  3. 向下舍入n到最接近的偶数整数n'
  4. 现在计算(m'+ n')*(m' - n'+ 2)/ 4
  5. 这个公式显然适用于我们有m'= n'(当然都是偶数)的基本情况,减少到(m'+ m')* 2/4 = m'。证明:为读者锻炼。

    示例如何:在从7开始的范围内加上甚至包含15个整数的整数。

    1. m = 7,n = 7 + 15-1 = 21
    2. m'= 8
    3. n'= 20
    4. (m'+ n')*(m' - n'+ 2)/ 4 =(8 + 20)*(20 - 8 + 2)/ 4 = 28 * 14/4 = 98
    5. 检查结果

      $ echo $(( 8 + 10 + 12 + 14 + 16 + 18 + 20 ))
      98
      

      Bash代码:为读者练习。

答案 1 :(得分:0)

这是第一次剪辑:

#!/bin/bash
cur=$1
max=$(( $1 + $2 ))
sum=0

# increment to next even number if starting value is odd
(( cur % 2 == 1 )) && (( ++cur ))
(( max % 2 == 1 )) && (( --max ))

for (( x=cur; x <= max; x+= 2 )); do
  (( sum += x ))
done

echo "$sum"

其工作原理如下:

# 4 = 4
$ ./sum-events 3 2
4

# 4 + 6 = 10
$ ./sum-events 4 2
10