0

我正在尝试编写一个接收整数“n”作为参数的代码,然后打印从 0、1、..、n 开始的帕斯卡三角形的第 n 行。例如,如果条目是 3,则程序打印 1 3 3 1。到目前为止,我编写了一个代码来打印整个三角形,但我不能只打印最后一行。这就是我所拥有的

echo "Insert the row:" read n for((i=0;i<$n;i++)) 
do      
eval"a$i=($(w=1;v=1
        for((j=0;j<$n-$i;j++))
        do 
            [ $i -eq 0 -o $j -eq 0 ]&&{ v=1 && w=1; }||v=$((w+a$((i-1))[$((j))]))
            echo -n "$v "
            w=$v
        done))"
     eval echo "$(for((k=0;k<=$i;k++)) 
        do 
            eval "echo -n \"\$((a\$((i-k))[k])) \"" 
        done)" 
    done
4

3 回答 3

1
#!/bin/bash
read -p "Insert the row:"  n

typeset -A Tab

for((i=0;i<=$n;i++))
do
  Tab[$i,0]=1
  Tab[$i,$i]=1
  for((j=1;j<$i;j++))
  do
    a=${Tab[$((i-1)),$((j-1))]}
    b=${Tab[$((i-1)),$j]}
    Tab[$i,$j]=$(( a + b ))
  done
done

#print result
for((j=0;j<=$n;j++))
do
  echo -n ${Tab[$n,$j]} " "
done
echo

测试 :

Insert the row:3
1  3  3  1 
于 2015-10-22T22:03:36.890 回答
1

我找到了awk该问题的解决方案:

awk -v line_num=5 'BEGIN{for(i=line_num;i<=line_num;i++){c=1;r=c;for(j=0;j<i;j++){c*=(i-j)/(j+1);r=r" "c};print r}}'

将值更改line_num为所需的值。

基于在此处找到的解决方案。

当然,如果重要的话awk……</p>

于 2015-10-22T22:09:00.333 回答
0

这是一个简单的 bash 脚本,使用简单的 for、if else 和 echo 命令打印帕斯卡的三角形:

echo "Enter number of rows : "
read rows
coef=1
for((i=0;i<rows;i++))
do
  for((space=1;space<=rows-i; space++))
  do
    echo -n "  "
  done
  for((j=0;j<=i;j++))
  do
    if [ $j -eq 0 -o $i -eq 0 ]
    then
        coef=1;
    else
        coef=$((coef*(i-j+1)/j))
    fi
    echo -n $coef "   "
  done
  echo
done
于 2019-02-28T14:31:46.343 回答