#!/bin/bash
#题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
#1.程序分析:利用辗除法。
read num1 num2
if (( num1 < num2 ))
then
tmp=$num1
num1=$num2
num2=$tmp
fi
a=$num1
b=$num2
while (( $b != 0 ));do
tmp=$(($a%$b))
a=$b
b=$tmp
done
echo $a
echo $(($num1*$num2/a))
#!/bin/bash
#【程序17】
#题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
#1.程序分析:利用while语句,条件为输入的字符不为'\n'.
#
#2.程序源代码:
read line
letters=0
spaces=0
digits=0
others=0
for c in `seq 0 $((${#line}-1))`;do
letter=${line:$c:1}
case "$letter" in
[[:alpha:]] )
(( letters++ ))
;;
[0-9] )
((digits++ ))
;;
[[:space:]] )
(( spaces++ ))
;;
* )
(( others++ ))
;;
esac
done
echo "letters = $letters digits = $digits \
spaces = $spaces others = $others"
#!/bin/bash
#题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
# 共有5个数相加),几个数相加有键盘控制。
#1.程序分析:关键是计算出每一项的值。
#2.程序源代码:
Tn=0
Sn=()
read n a
sum=0
for count in `seq 0 $(($n-1))`;do
(( Tn += $a ))
(( a *= 10 ))
Sn[$count]=$Tn
echo "Sn = ${Sn[$count]}"
(( sum += ${Sn[$count]} ))
done
echo "Sum = $sum"
#!/bin/bash
##set -x
#【程序19】
#题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
# 找出1000以内的所有完数。
#1. 程序分析:请参照程序<--上页程序14.
#2.程序源代码:
index=0
for j in {2..1000};do
k=()
n=-1
s=$j
for i in `seq 1 $(($j - 1 ))`;do
if (( $j % $i == 0 ));then
(( n += 1 ))
(( s -= i))
(( index ++ ))
k[$n]=$i
fi
done
if [ $s -eq 0 ];then
echo -n "$j = "
for i in `seq 0 $(( $n - 1))`;do
echo -n "${k[$i]}+"
done
echo ${k[$n]}
fi
done
#!/bin/bash
#【程序20】
#题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
# 第10次落地时,共经过多少米?第10次反弹多高?
#1.程序分析:见下面注释
#2.程序源代码:
Sn=100
Hn=$(( $Sn / 2 ))
for n in {2..10};do
Sn=`echo "$Sn + 2* $Hn" | bc -l`
Hn=`echo "$Hn/2" | bc -l`
done
echo "Totoal of road is $Sn"
echo "The tenth is $Hn meter"
阅读(731) | 评论(0) | 转发(1) |