首页 > 试题广场 >

打印等腰三角形

[编程题]打印等腰三角形
  • 热度指数:12906 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
编写一个shell脚本,输入正整数n,打印边长为n的等腰三角形。
示例:
输入:5
输出:
    *
   * *
  * * *
 * * * *
* * * * *
示例1

输入

5

输出

    *
   * *
  * * *
 * * * *
* * * * *
printf "    *
   * *
  * * *
 * * * *
* * * * *
"

发表于 2021-11-23 10:35:58 回复(16)
echo "    *"
echo "   * *"
echo "  * * *"
echo " * * * *"
echo "* * * * *"
发表于 2022-04-10 14:08:33 回复(0)
awk 'END{
    for(n=1;n<=5;n++){
        row = "";
        for(i = 1;i<=5-n;i++){
            row = row " "
        }
        for(i = 1;i<=n;i++){
            row = row "*" " "
        }
        print row
    }
}'

发表于 2021-11-26 23:58:59 回复(0)
# echo -n 表示输出不换行
for((i=1;i<=5;i++))
do
    for((j=5-i;j>=1;j--))
    do
        echo -n " "
    done
    for((j=i;j>=1;j--))
    do
        echo -n "* "
    done
    echo
done

发表于 2022-07-19 10:27:03 回复(0)
#!/bin/bash

read n
for (( i=1; i < $n+1; i++)); do # 打印 n 行
    # 打印左半部分空格
    for (( j=$n; j > $i; j-- )); do
        echo -n " "
    done

    # 打印星星
    for (( j=0; j < $i; j++ )); do
        echo -n "* "
    done
    printf '\n'
done

发表于 2023-01-29 12:05:13 回复(0)
while read line; do
    i=1
    while [ $i -le $line ]; do
        j=1
        while [ $j -le $(($line-$i)) ]; do
            echo -n " "
            j=$(($j+1))
        done
        for ((k=1;k<=$i;k++)); do
            echo -n "* "
        done
        i=$(($i+1))
        echo ""
    done
done

发表于 2023-01-07 14:16:12 回复(0)
while read line
do
arr=$line
((n=arr[0]))
for((i=1;i<=$n;i++))
do
for((j=1;j<=$n-$i;j++))
do
echo -n " "
done
for((t=1;t<=$i;t++))
do
echo -n "* "
done
echo ""
done
done
发表于 2022-09-23 16:52:18 回复(0)
a='    *';for i in `seq 1 5` ; do echo "$a";a=$a' *';a=${a:1}; done;
发表于 2021-12-12 14:30:47 回复(2)
for ((i=1;i<=5;i++))
do 
    for((j=5;j>i;j--))
    do 
        echo -n ' ' 
    done 
    for((k=1;k<=i;k++)) 
    do 
        echo -n "* "
    done 
    echo ''
done 
发表于 2025-03-20 21:36:24 回复(0)
#!/bin/bash
read -r num

for ((i = 1; i <= num; i++)); do
	for ((j = num - i - 1; j >= 0; j--)); do
		echo -n " "
	done
	for ((k = 1; k <= i; k++)); do
		if [[ $k -eq $i ]]; then
			echo -n "*"
		else
			echo -n "* "
		fi
	done
	echo ""
done

发表于 2024-07-02 17:22:38 回复(0)
awk 'BEGIN{for(i=5;i>0;i--){for(j=i-1;j>0;j--){printf " "}for(k=i-1;k<5;k++){printf "* "}print}}' | sed -n 's/ $//gp'
发表于 2024-06-17 10:32:03 回复(0)
# 方法1: 最笨的方法
# 1: 打印4个空格+"* "*1
# 2:  打印3个空格+"* "*2
# 3:  打印2个空格+"* "*3
# 4:  打印1个空格+"* "*4
# 5:  打印0个空格+"* "*5
# 若打印num等边三角形,则n行应该是
# n: 打印num-n个空格+打印n个“* ”
read -r num
for n in $(seq 1 "$num"); do
    # 打印num-index个空格
    # shellcheck disable=SC2007
    for i in $(seq 1 $[$num-$n]); do
        echo -n ' '
    done
    # 打印n个“* ”
    for j in $(seq 1 "$n"); do
        echo -n '* '
    done
    # 每个循环过后回车换行
    echo
done


# 方法2:使用awk
# 考察点: 由于awk中的语法是c语言,所以num不能再awk的代码块中直接使用,因此使用awk -v {代码块中的变量名}=${shell中的变量名}
# 然后再awk中用正常的思维撰写代码即可
read -r num
awk -v num="${num}" 'BEGIN{
    for(i=0;i<num;i++){
       row=""
       for(j=1;j<num-i;j++) {
           row=row " "
       }
       for(j=0;j<=i;j++) {
           row=row "* "
      }
      print row
    }
}'

发表于 2023-03-20 21:58:43 回复(0)
echo -e '    *\n   * *\n  * * *\n * * * *\n* * * * *'
发表于 2022-09-01 21:21:33 回复(0)

前空格、后空格、星号间空格三个循环

awk 'BEGIN{
    for(i=1;i<=5;++i){
        for(j=1;j<=5-i;++j){
            printf(" ")
        }
        for(j=1;j<=i;++j){
            printf("*")
            printf(" ")
        }
        for(j=1;j<=5-i;++j){
            printf(" ")
        }
        printf("\n")
    }
}' 
发表于 2022-08-27 21:09:06 回复(0)
def print_triangle(N):
    for i in range(N):
        for j in range(N-i-1):
            print(' ',end='')
        for k in range(2*i+1):
            if k%2==0:
                print('*',end='')
            else:
                print(' ',end='')
        print()
print_triangle(9)
发表于 2022-08-12 17:26:57 回复(0)
for (( i=1;i<=5;i++))
do
    for ((j=5;(j-i)>0;j--))
    do
        echo -n " "
    done
    for ((k=1;k<=(2*i-1);k++))
    do
        if [ $((k%2)) -eq 0 ]
        then
            echo -n " "
        else
            echo -n "*"
        fi
    done
    echo
done
发表于 2022-07-13 10:01:35 回复(0)
awk '{printf("    *\n   * *\n  * * *\n * * * *\n* * * * *")}'
发表于 2022-06-09 14:09:41 回复(0)
for((i=1;i<=5;i++))
do
    {
    for((e=1;e<=5-i;e++))
    do
        {
            echo -n " "
        }
    done
    for((j=1;j<=i;j++))
    do
        {
            echo -n "* "
        }
    done
    echo
}
done
发表于 2022-05-10 15:44:39 回复(0)
line=5
eval 'ast=`printf "%$((${line}-1))s*"`'

for i in $(seq 1 $line); do 
    echo "$ast"
    ast=${ast/" *"/"* *"}
done
发表于 2022-04-28 10:16:10 回复(0)
awk '{
 for(i=5;i>0;i--){
  str="";
  for(j=i-1;j>0;j--) str=str OFS;
  for(j=0;j<6-i;j++) str=str "*" OFS;
  print str;
 }
}'
原来awk的语法中拼接字符串如此简单,我以为还要`str+="*"`这种
而且好像这里的for循环括号里边不能写双变量;
发表于 2022-04-23 12:08:07 回复(0)