2013-02-24 shell脚本练习题

回复 收藏
邱李笔试题shell脚本:
请详细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字。
10 31 53 77  105 141 .......

试题解析:
我想大多数人都会去比较这些数字的差值:
10  31  53  77  105  141
   21   22   24   28   36
但是这个差值看,并没有什么规律,而我们再仔细看的时候,发现这个差值的差值是有规律的:
10  31  53  77  105  141
   21   22   24   28   36
       1      2     4     8
所以,最终得出规律

shell脚本如下:{{{密码回复可见}}}
2014-02-24 12:05 举报
已邀请:
0

chekir

赞同来自:

规律,一开始就找到了,就是不会写
0

649868096

赞同来自:

shell脚本练习
0

不断更新

赞同来自:

只要功夫深,铁杆磨成针。
0

無名世界

赞同来自:

学习了。
0

SHMILY

赞同来自:

对比对比
0

Agatha-cn

赞同来自:

1
0

zhangxiaobo

赞同来自:

学习
0

木字当头

赞同来自:

very good
0

hkj8808

赞同来自:

#! /bin/bash

a=10

for i in  1 2 3 4 5 6 ;do

echo $a
a=$[$a+20+2**(i-1)]

done

对一下
0

___紸角__...

赞同来自:

#!/bin/bash
#

init_sub=16
init_num=141
for i in `seq 1 10`
do
        init_sub=`expr $init_sub \* 2`
        init_num=$((init_sub+init_num))
        echo -n "$init_num  "
done
echo ""
echo "there are the follow ten number!"
0

___紸角__...

赞同来自:


我的 错了!
0

白紙黑_Zi

赞同来自:

看看
0

路过

赞同来自:

是不会
0

八滴眼泪

赞同来自:

看看下答案
0

ocean

赞同来自:

[root@OceanV sh]# cat 1.sh
#! /bin/bash
#请详细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字。
#10 31 53 77  105 141 .......
#10  31  53  77  105  141
#   21   22   24   28   36
#       1      2     4     8

a=10

for i in  `seq 1 16` ;do
    if((i>6))
       then
           echo $a
    fi

a=$[$a+20+2**(i-1)]

done
0

楓瀛夢鞢

赞同来自:

学习
0

牧羊人

赞同来自:

哇哈哈
0

牧羊人

赞同来自:

哇哈哈
0

楓瀛夢鞢

赞同来自:

#! /bin/bash
a=10
b=21

for i in `seq 0 15`; do
c=$[2**$i]
echo $a
a=$[$a+$b]
b=$[$c+$b]
done
0

轩鹏

赞同来自:

1
0

nihao426181

赞同来自:

哈哈……………………有意思……
0

牛牛

赞同来自:

{:5_121:}
0

黑色的梦

赞同来自:

{:4_91:}
0

zyfeifie

赞同来自:

kankan
0

So Long

赞同来自:

哈哈
0

鸵鸟

赞同来自:

xx
0

Louis

赞同来自:

本帖最后由 Louis 于 2014-8-31 18:25 编辑

#!/bin/bash
## This script is to list ten number after '10 31 53 77  105 141 ...'
## Writed by Louis on 2014/08/31 07:45

echo '10 31' >> result
l=0
m=0
k=0
n=0

for i in `seq 0 13`; do
#for i in `seq 0 100`; do
    for j in $[2**$i]; do
        l=$[$j+$l]
        m=$[21+$l]
        k=$[$m+$k]
        n=$[31+$k]
    if [ -z `echo $n|sed 's/[0-9]//g'` ]; then                #防止溢出,溢出为负数,需终止输出。
        echo $n >>result
    else
        echo `cat result|xargs`
        rm -rf result
        echo "Num is out of range[Num>(2^62)-1]!"
        exit
    fi
    done
done
echo `cat result|xargs`
rm -rf result

思路:
计算序列,需反推,由底层算起
10  31     53           77               105                 141                  — 31+k
10  31  31+22  31+22+24  31+22+24+28  31+22+24+28+36    — k=0; k+=l  求和
   21   22    24   28   36                                                                — 21+l
      21+1  21+1+2 21+1+2+4 21+1+2+4+8                             — l=0; l+=j   求和
       1      2     4     8                                                                  — j=2^i
     2^0  2^1 2^2 2^3                                                          — i=0 1 2 3 ...
0

Wagskun

赞同来自:

学习
0

小雨

赞同来自:

#!/bin/bash

re=10
for i in `seq 0 15`;do
        printf $re
        let re=${re}+20+2**$i
        printf '  '
done
echo
0

第六感

赞同来自:


#!/bin/bash
#
addvalue=10
echo -n "$addvalue "
for i in `seq 0 14`;do

                let value=20+2**$i
                let addvalue+=$value
        echo -n "$addvalue "
done
0

chenzudao1234

赞同来自:

kankan
0

huifeidexiaxia

赞同来自:

学习
0

So Long

赞同来自:

不难
0

soar

赞同来自:

看卡
0

xuyl

赞同来自:

学习,学习。。。。。。。。。。
0

oszhang

赞同来自:

1
0

yaabb163

赞同来自:

ddddddddddddddd
0

cmzsteven

赞同来自:

{:4_91:}
0

zzfeng2012

赞同来自:

..
0

zhangw

赞同来自:

1
0

hangtiangazi

赞同来自:

代码
  1. #!/bin/bash
  2. ## test by gxw @21:58 2015/3/19
  3. n=2
  4. for i in `seq 3 12`;do
  5.         for j in `seq 1 $i` do
  6.                 n=$[$n*2]
  7.         done
  8.         numspan=$[$n+36]
  9.         finalnum=$[$numspan+141]
  10.         echo "$finalnum  "
  11. done
  12.        


0

qq20847697

赞同来自:

#!/bin/bash
x=10
for i in `seq 0 10`;do
echo $x
j=$[2**$i]
x=$[$x+20+$j]
done
0

cisco12355074

赞同来自:

shell练习题,学习学习
0

tjlygdx

赞同来自:

看一下
0

一笑而过

赞同来自:

这个题目有点难度啊
0

liqiang_3902

赞同来自:

第一次看
0

googleqicq

赞同来自:

高大上啊
0

落、雨寒

赞同来自:

11
0

llzdwyp

赞同来自:

#!/bin/bash
n=8
n2=36
num=141
start=1
while [ $start -le 10 ]
      do
n=$[$n*2]
n2=$[$n2+$n]
      start=$[$start+1]
      num=$[$num+$n2];echo $num
done
0

iwannachange

赞同来自:

  1. #!/bin/bash
  2. num=10
  3. for I in `seq 15`;do
  4. I=$[$I-1]
  5. num=$[$num+20+2**$I]
  6. if [ $num -gt 141 ] ;then
  7. echo $num
  8. fi
  9. done


0

Armani

赞同来自:

#!/bin/bash
m=10
for  i in  `seq 2 16`
do
   m=$[$m+20+2**(i-2)]
     if [ $i -gt  6 ];then
        echo $m
     fi
done
0

307141950

赞同来自:

a(n)=20n+2e(n-2)-10仅此而已!!
0

渐行渐远

赞同来自:

学习
0

shajoe

赞同来自:

马克
0

ifconfig2

赞同来自:

学习学习
0

wzwyql

赞同来自:

1
0

Shawn

赞同来自:

规律:i=10 ; for n in 'seq 0 15'  ; i=i+21+2^n
0

ldp840611

赞同来自:

看看
0

J!_yuan

赞同来自:

看看
0

Rohero

赞同来自:

学习
0

翟厚翔

赞同来自:

a=0 b=1 while [ $a -lt 10 ];  do  b=$[ 10 +$b*21 + 2**$a]  a=`expr $a + 1`  echo "$a number is $b" >> 9.txt done
0

qin521ne

赞同来自:

xuexi
0

hlymlv

赞同来自:

学习
0

石头

赞同来自:

{:4_91:}
0

weifeng1463

赞同来自:

ok
0

thedawn

赞同来自:

1
0

loveyouhyf

赞同来自:


不错,相当精简
0

大仔黑黑

赞同来自:

ok


0

18898562952

赞同来自:

1
0

老咸菜

赞同来自:

mark
0

zql254

赞同来自:

  1. a=10
  2. b=21
  3. c=1
  4. i=0
  5. while [ $i -lt 16 ];do
  6. echo $a
  7. a=$[$a+$b]
  8. b=$[$b+$c]
  9. c=$[$c*2]
  10. i=$[$i+1]
  11. done
0

prospect

赞同来自:

193
277
425
701
1233
2277
4345
8461
16673
33077
[root@Master home]# cat test.sh
#!/bin/sh

a=10

for i in `seq 1 15`
do
    a=$[ $a +20 +2**(i-1) ]
    echo $a
done
0

xteplinux

赞同来自:

{:4_91:}
0

licengceng

赞同来自:

学习
0

lin19890913

赞同来自:

看看
0

KICAZ629

赞同来自:

666
0

落涧飞鹰

赞同来自:

看看
0

追风者

赞同来自:

1
0

15036085170

赞同来自:

  1. #!/bin/bash

  2. a=10
  3. k=1
  4. for i in $(seq 2 16)
  5. do
  6.     a=$(($a+20+$k))
  7.     k=$(($k*2))
  8.     if [ "$i" -gt 6  ];then
  9.         echo $a
  10.     fi
  11. done


0

jokerhuman

赞同来自:

学习
0

北辰星

赞同来自:

学习
0

我是学渣

赞同来自:

{:4_99:}
0

LPing

赞同来自:

学习
0

lin13750529011

赞同来自:

谢谢
0

wangzai

赞同来自:

学习
0

cxiaodian

赞同来自:

good
0

820009174

赞同来自:

学习一下
0

starry

赞同来自:

对下答案
#! /bin/bash
a=(10 31 53 77 105 141)
#echo ${a
  • }
    for i in `seq 6 15`
    do
        a=$[2*${a[i-1]}+2**(i-2)-${a[i-2]}]
    done
    echo ${a[@]}
  • 0

    小猫咪

    赞同来自:

    新手

    #/bin/bash
    #inital arry
    a=(10)
    b=(21)
    c=()
    #export VARB
    #initl function arry c
    init_arryc()
    {
            for((i=0;i<15;i++))
            do
                    var=2
                    c[$i]=$(( $var**$i))
            done
    }
    math_arryb()
    {
            for((j=0;j<15;j++))
            do
                    varb=$[$j+1]
                    b[$varb]=$[${b[$j]} + ${c[$j]} ]
            done


    }
    math_arryc()
    {

            for((k=0;k<15;k++))
            do
                    vara=$[ $k+1 ]
                    a[$vara]=$[${a[$k]}+${b[$k]}]
            done
    }

    init_arryc
    math_arryb
    math_arryc
    echo "${c
  • }"
    echo "${b
  • }"
    echo "${a
  • }"
  • 0

    gxp2008

    赞同来自:

    我是想着用shell数组搞。shell数组似乎没有办法直接做数学运算。
    那难道要存到数组,在一个一个取出来么
    0

    黄大伟

    赞同来自:

    的说法是否sdf
    0

    664778717@qq.co

    赞同来自:

    学习学习
    0

    Eric_NeuroSky

    赞同来自:

    只想看看答案
    0

    wangxinpeng

    赞同来自:

    几种解法
    0

    ayuan124

    赞同来自:

    学习下
    0

    且听风吟

    赞同来自:

    不会写
    0

    yangjian319

    赞同来自:

    学习了。
    0

    木头爱木头媳妇

    赞同来自:

    看看
    0

    木头爱木头媳妇

    赞同来自:

    看看
    0

    branttsai

    赞同来自:

    study,tks

    回复帖子,请先登录注册

    退出全屏模式 全屏模式 回复
    评分
    • 评分区间
    • 学分
    • -30 ~ 30
    可选评分理由: