邱李笔试题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脚本如下:{{{密码回复可见}}}
请详细查看如下几个数字的规律,并使用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脚本如下:{{{密码回复可见}}}
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!"
#
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
[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
#! /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
本帖最后由 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 ...
#!/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
#!/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
小雨 发表于 2014-9-9 11:00
#!/bin/bash
re=10
#!/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
代码
- #!/bin/bash
- ## test by gxw @21:58 2015/3/19
- n=2
- for i in `seq 3 12`;do
- for j in `seq 1 $i` do
- n=$[$n*2]
- done
- numspan=$[$n+36]
- finalnum=$[$numspan+141]
- echo "$finalnum "
- done
-
0
#!/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
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
- #!/bin/bash
- num=10
- for I in `seq 15`;do
- I=$[$I-1]
- num=$[$num+20+2**$I]
- if [ $num -gt 141 ] ;then
- echo $num
- fi
- done
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
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
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
- #!/bin/bash
- a=10
- k=1
- for i in $(seq 2 16)
- do
- a=$(($a+20+$k))
- k=$(($k*2))
- if [ "$i" -gt 6 ];then
- echo $a
- fi
- done
0
对下答案
#! /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[@]}
#! /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 }"
#/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
编辑回复