首页 > 试题广场 >

空心三角形图案

[编程题]空心三角形图案
  • 热度指数:25035 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”三角形图案。

输入描述:
多组输入,一个整数(3~20),表示输出的行数,也表示组成三角形边的“*”的数量。


输出描述:
针对每行输入,输出用“*”组成的“空心”三角形,每个“*”后面有一个空格。
示例1

输入

4

输出

*       
* *     
*   *   
* * * * 
示例2

输入

5

输出

*         
* *       
*   *     
*     *   
* * * * *
#include<stdio.h>
int main()
{
    int num = 0;
    while(scanf("%d",&num)!=EOF)
    {
        getchar();
        for(int i = 0;i < num;i++)
        {
            for(int j = 0;j < num;j++)
            {
                if(j == 0 || i == num - 1 ||i == j)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2022-07-28 20:59:53 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int count;
        boolean flag;
        while(scanner.hasNext()) {
            count = scanner.nextInt();
            for(int i=0;i<count;i++) {
                for(int j=0;j<=count*2;j++) {
                    //条件是精髓
                    flag = i==count-1?j%2==0:j==0||(j%2==0&&j/2==i);
                    if(flag) {
                        System.out.printf("*");
                    }else {
                        System.out.printf(" ");
                    }
                }
                System.out.println();
            }
        }
    }
}
三目运算符解析:
//如果是最后一行
if(i==count-1) {
    if(j%2==0) 
        输出*;
    else
        输出空格;
}else {
//不是最后一行
    //j/2==i有两种情况:1. j = 2*i   2. j = 2*i + 1
    //所以避免出现第二种情况,必须判定j为偶数,即j%2==0
    if(j/2==i&&j%2==0)
        输出*;
    else
        输出空格;
}
发表于 2021-03-18 09:10:20 回复(0)
#include<stdio.h>
int main()
{
    int n;
    while( ~scanf("%d",&n) )
    {
        for( int i = 0 ; i < n ; i++ )
        {
            if( i == 0 ) printf("*\n");
            else if( i == n - 1 )
            {
                for( int j = 0 ; j < n ; j++) printf("* ");
                printf("\n");
            }
            else 
            {
                for( int m = 0 ; m < 2 * i + 1 ; m++ )
                {
                    if( m == 0 || m == 2 * i ) printf("*");
                    else printf(" ");
                }
                printf("\n");
            }
        }
    }
    return 0;
}

发表于 2022-06-17 12:59:20 回复(0)
#include <stdio.h>

int main(){
    int n;
    while(~ scanf("%d", &n)){
        for(int i = 0; i < n; i++){
            for(int j = 0; j <= i; j++){
                if(i >= 2 && i <= n - 2 && j >= 1 && j <= i - 1)
                    printf("  ");
                else
                    printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2022-05-27 10:09:57 回复(0)
#include <iostream>
using namespace std;

int main()
{
    int n;
    while (scanf("%d", &n) != EOF)
    {
        for (int i = 1; i <= n; i ++ )
        {
            if (i == 1) printf("* \n");
            else if (i == n) 
            {
                for (int j = 1; j <= n; j ++ ) printf("* ");
                printf("\n");         
            }
            else
            {
                printf("* ");
                for (int k = 1; k <= i - 2; k ++ ) printf("  ");     
                printf("* \n");
            }
        }
    }
}

发表于 2022-02-28 19:04:40 回复(0)
#include <stdio.h>

int main(void)
{
    int i, j, k, t;
    
    while (scanf("%d", &k) != EOF && (k >= 3 && k <= 20))
    {
        for (i = 1; i <= k; i++)
        {
            for (j = 1; j <= i; j++)
            {
                if (i < 3 || i > k - 1)
                {
                    printf("* ");
                }
                else
                {
                    printf("* ");
                    for (t = 3; t <= i; t++)
                    {
                        printf("  ");
                    }
                    printf("* ");
                    break;//特殊行的处理;
                }
            }
            for (j = i; j <= k - 1; j++)
            {
                printf("  ");
            }
            putchar('\n');
        }
    }
    
    return 0;
}

发表于 2020-05-27 20:36:17 回复(0)
有毒三角形外面也要打印!!!
#include <stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF){
        int i,j;
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                if(j==0||i==j||i==n-1){
                    printf("* ");
                }else{
                    printf("  ");
                }
            }
            printf("\n");
        }
    }
}

发表于 2020-04-10 16:28:40 回复(1)
😎😎😎😎😎😎😎😎可以把这个空三角形分为三部分:1前两行,2最后一行,3和中间部分。
#include<stdio.h>
int main()
{
    int n,i,j,a;
    while(~scanf("%d",&n))
    {       //先把前两行直接打印
            printf("* ");
            printf("\n");
            printf("* * ");
            printf("\n"); 
        for(i=0;i<n-3;i++)//需要打印空格的行数
        {
            printf("* ");
            for(j=0;j<i+1;j++)
            {
                printf("  ");//这里有两个空格
            }
            printf("* ");
            printf("\n");
        }
     for(i=0;i<n;i++)//打印最后一行,不要忘了每一个*后有一个空格
     {
         printf("* ");
     }
     printf("\n"); 最后还需要一个换行符,太坑了。
    }   
    return 0;
}
发表于 2021-11-24 22:51:22 回复(0)
#include <stdio.h>

int main() {
    int a, b;
    while (scanf("%d", &a) != EOF)
    {
        for(int i =  0;i < a;i++)
        {
            for(int j = 0;j < a;j++)
            {
                if(i == j || i + j == i || i == a-1)
                {
                    printf("* ");
                }
                else {
                    printf("  ");
                }
            }
            printf("\n");
        }

    }
    return 0;
}
发表于 2024-04-20 13:31:29 回复(0)
#include <stdio.h>

int main() {
    int n=0;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(i==n-1||j==0||j==0||i==j)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }
    }
    return 0;
}

编辑于 2024-04-05 21:45:58 回复(0)
#include <stdio.h>

int main()
{
    int n;
    while (scanf("%d", &n) != EOF)
    {
        //用第一层for循环实现n行。
        for(int i = 1; i <= n; i++)
        {
            //第二层for循环实现每行输出,每行都比上一行多一个位置。
            for(int j = 1; j <= i; j++)
            {
                //如果是第一行或最后一行,一直打印* 。
                if((i == 1) || (i == n)){
                    printf("* ");
                }
                //其他行。
                else{
                    //在第一个和最后一个位置打印* 。
                    if((j == 1) || (j == i)){
                        printf("* ");
                    }
                    //其他位置打印两个空格。
                    else{
                        printf("  ");
                    }
                } 
            }
            printf("\n");//每一行结束后换行。
        }
    }
    return 0;
}

编辑于 2024-02-22 10:16:23 回复(0)
while True:
    try:
        n=int(input())
        print('*')
        for i in range(1,n-1):
            print('*'+' '*(2*i-1)+'*')
        print('* '*n)
    except:
        break

发表于 2023-08-02 20:01:52 回复(0)
while True:
    try:
        n = int(input())
        for i in range(1,n+1):
            if i == 1&nbs***bsp;i == 2&nbs***bsp;i==n:
                print(f"{'* '*i}")
            else:
                print("* " + "  " * (i-2) + "* ")
    except Exception as e:
        break

发表于 2024-09-28 20:45:32 回复(0)
#include<stdio.h>
int main()
{
int n=0;
while((scanf("%d",&n))!=EOF)
{
int i=0,j=0;
for(i=1;i<=n;++i)
{

for(j=1;j<=(2*n-1);++j)
{
if((j==1)||((i==n)&&((j%2)!=0))||(j+1==2*i))
printf("*");
else
 printf(" ");

}
printf("\n");
}

}
    return 0;
}
发表于 2024-08-24 20:39:17 回复(0)
int main()
{
    int n = 0;
    int i = 0, j = 0;
    int k = 0;
    while (scanf("%d", &n) != EOF)
    {
        char arr = '*';
        
        for (i = 1; i <= n; i++)
        {
            //打印最顶部分*
            if (i == 1)
            {
                printf("* \n");
            }
            //2、打印三角形的底
            else if (i == n)
            {
                for (j = 1; j <= n; j++)
                {
                    printf("%c ", arr);
                }
                printf("\n");
            }
            //打印两边
            else if (i >= 2 || i <= n - 1)
            {
                for (j = 1; j <=1; j++)
                {
                    printf("%c",arr);
                }
                for (j = n; j > n+2-i; j--)//每次递增,打印5行,就需要打印1,3,5个空格
                {
                    printf("  ");
                }
                for (j = 1; j <= 1; j++)
                {
                    printf(" %c",arr);
                }
                printf("\n");
            }
        }
    }
    return 0;
}

发表于 2024-08-19 16:23:35 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();

            for (int i = 0; i < n; i++) {
                for (int j = 0; j <= i; j++) {
                    if (i == 0 || i == n - 1 || j == 0 || j == i) {
                        System.out.print("* ");
                    } else {
                        System.out.print("  ");
                    }
                }
                System.out.println();
            }
        }
        in.close();
    }
}

发表于 2024-08-18 21:48:42 回复(0)
#include <stdio.h>
int main() {
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (i == j)
                {
                    printf("* ");
                }
                else if (i >= 0 && i < n && j == 0)
                {
                printf("* ");
                }
                else if (j >= 0 && j < n && i == n-1)
                {
                    printf("* ");
                }
                else
                {
                printf("  ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2024-08-07 20:55:38 回复(0)
#include <stdio.h>

int main() {
   int n;
   while(~scanf("%d",&n))
   {
    for(int i=1;i<=n;i++)
    {
        if(i!=n)
        {
            for(int j=1;j<=i;j++)
            {
                if(j==i||j==1)
                printf("* ");
                else
                printf("  ");
            }
        }
        else
        {
            for(int z=1;z<=n;z++)
            printf("* ");
        }
        printf("\n");
    }
   }
    return 0;
}
发表于 2024-08-04 12:24:31 回复(0)
int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        for (int i = 0; i < n; i++) {
            if (i < 2 || i == n - 1) {
                for (int j = 0; j < i + 1; j++) {
                    printf("* ");
                }
                printf("\n");
            }
            else {
                printf("* ");
                for (int j = 0; j < i - 1; j++) {
                    printf("  ");
                }
                printf("*\n");
            }
        }
    }

    return 0;
}

发表于 2024-08-03 11:30:00 回复(0)
#include <stdio.h>

int main() {
    int n = 0;
    while (scanf("%d", &n) != EOF) 
    {
        for(int i = 0; i < n ; i++)
        {
            for(int j = 0; j <= i; j++)
            {
                if(j == 0 || j == i || i == n - 1)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2024-06-21 01:21:06 回复(0)