数据结构+算法 |
时间有限,加倍努力
杨辉三角:
33
34 #这是显示杨辉三角
35 #经过测试只要num i j k这些数字变量参与+-*/% ++ --算术运算时都可以不用$ijk
36 #$[a[0]+a[1]] 这样可以进行数字运算而不用写成$[${a[0]}+${a[1]}]的形式
37 #若是数组是一维的,如a[i-1]这样的书写是可以的不必写a[$[i-1]]
38 #显示数组单个元素:${a[i]}
39 #显示数组所有元素:${a[*/@]}
40 #一维数组可以写成:a[i-1]
41 #条件判断与输出时尽量加上$i符号
42
43 #read -a num 这样可以读入一些数字填充到数组num中 a=arrary
44 #数组中的元素个数:${#num[*/@]}
45 #数组中的元素:num[0]表示第一个元素 num[n-1]表示第二个元素 ,记住数组下标是以0开始
46
47 #二维数组
48 #算术计算与一维一样:a[$i$k]=$[a[$[i-1]$[k-2]]+a[$[i-1]$k]
49 #输出:a[$i$k]
50
51
52 #读取一个数字,你所要想创建的高度:
53 read -p "Please input a number: " num
54
55 #for循环从1到最高,限制每行输出:
56 for((i=1;i<=num;i++));
57 do
58 #这个for是显示数字前面的空行,直接可以用num-i,这个不是一次打印完,而是有i决定行,num-i决定打印多个空格
59 for((j=1;j<=$[num-i];j++));
60 do
61 #这是输出空,\c前面有一个空格,不换行输出\c
62 echo -e " \c"
63 done
64 #这个是创建数字,思想就是第k行要创建2k-1个位置,其中偶数位置为空,奇数位置有数字显示,用i与k来控制每行的输出
65 for((k=1;k<=$[2*i-1];k++));
66 do
67 #以前是根据i来判断前两行,先创建前两行上的数字。后来合并了为先创建每行的每一个与最后一个,用i与k来判断,每行开始是1,最后是2*i-1
68 #把每行的行首与行尾数字确定为1
69 if [ $k -eq 1 -o $k -eq $[2*i-1] ];then
70 #把每行的第一个与最后个赋值为1
71 a[$i$k]=1
72 #打印输出
73 echo -e "${a[$i$k]}\c"
74 #只有i=2才到这一步,且只能走完下面else下的if(因为当i=2时,k=1,2,3,而1与3是行首与行尾,只有k=2才下到这步且k%=2即2%2==0
75 #故而最终i=3才会走完下面的循环
76 else
77 #控制偶数位置为空,奇数位置为数字,开始的时候控制到i=2才走到这步
78 if [ $[k%2] -eq 0 ];then
79 #偶数位置空
80 echo -e " \c"
81 #控制只有i=3才走到这儿,也就是说从第3行开始
82 else
83 #数学思想,此行i的奇数位置除了行首与行尾外,其值=对应上的层位置i-1,k-2加上i-1,k
84 #其中的i-1是代表是i行的上一层
85 #k-2代表同位置在上一行减1(上层比下层少1个),再向左减1
86 #k代表同位置在上一行减1(上层比下层少1个),再向右加1
87 a[$i$k]=$[a[$[i-1]$[k-2]]+a[$[i-1]$k]]
88 #打印输出
89 echo -e "${a[$i$k]}\c"
90 fi
91 fi
92
93 done
94 #i的一次循环一次结束换行
95 echo
96 done
sed小记:
一个月有感,努力,努力,再努力
珍惜所有吧!!!