首页 > 试题广场 >

箭形图案

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

输入描述:
本题多组输入,每行一个整数(2~20)。


输出描述:

针对每行输入,输出用“*”组成的箭形。

示例1

输入

2

输出

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

输入

3

输出

      *
    **
  ***
****
  ***
    **
      *
示例3

输入

4

输出

        *
      **
    ***
  ****
*****
  ****
    ***
      **
        *
#include <stdio.h>
int main() {
    int n = 0;
    while (scanf("%d", &n) != EOF) {
        // ----------------- 上半部分
        int kk = n * 2;
        for (int i = 0; i <= n; i++) {
            for (int a = kk; a != 0; a--) {
                printf(" ");
            }
            for (int b = 0; b <= i; b++) {
                printf("*");
            }
            printf("\n");
            kk -= 2;
            if (kk == 1) {
                kk--;
            }
        }
        // ----------------- 下半部分
        int zz = 2;
        int yy = n;
        for (int x = n; x != 0; x--) {
            for (int c = zz; c != 0; c--) {
                printf(" ");
            }
            for (int d = yy; d != 0; d--) {
                printf("*");
            }
            zz += 2;
            yy--;
            printf("\n");
        }
    }
    return 0;
}
发表于 2025-06-22 17:28:02 回复(0)
#include <stdio.h>

int main() {
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<=n;i++)
        {
            for(int x=0;x<2*n-2*i;x++)
            {
                printf(" ");
            }
            for(int x=0;x<=i;x++)
            {
                printf("*");
            }
            printf("\n");
        }
        for(int i=0;i<n;i++)
        {
            for(int x=0;x<2*i+2;x++)
            printf(" ");
            for(int x=0;x<n-i;x++)
            printf("*");
            printf("\n");
        }
    }
    return 0;
}
发表于 2025-02-26 22:28:19 回复(0)
#include <stdio.h>
void print_arrow(int n) {
    int i = 0, j = 0;
    for (i = 0; i <= n; i++) {
        for (j = 0; j < n - i; j++) {
            printf("  ");
        }
        for (j = 0; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j <= i; j++) {
            printf("  ");
        }
        for (j = 0; j < n - i; j++) {
            printf("*");
        }
        printf("\n");
    }
}

int main() {
    int n = 0;
    while (scanf("%d", &n) != EOF) {
        print_arrow(n);
    }
}
发表于 2025-01-09 06:32:50 回复(0)
#include<stdio.h>
int main()
{
    int n, i, j,k;
    while ((scanf("%d", &n) != EOF))
    {
        k = 0;
        for (i = 0; i < 2 * (n+1); i = i + 2)
        {
            for (int j = i; j < (2 * n); j++) printf(" ");
            for (int m = i; m >= k; m--)  printf("*");            
            k++;
            printf("\n");
        }
        k =n+2;
        for (i = 2; i < 2 * (n + 1); i = i + 2)
        {
            for (int j = i; j >0; j--) printf(" ");
            for (int m = i; m< k; m++)   printf("*");
            
            k++;
            printf("\n");
        }
    }
    return 0;
}

发表于 2024-08-26 21:08:38 回复(0)
#include<stdio.h>
int main()
{
int n=0;
while((scanf("%d",&n))!=EOF)
{
int i=1;

for(;i<=n+1;++i)//上半部分
{
int j=1;
for(j=1;j<=(n+1-i)*2;++j)
printf(" ");
for(j=1;j<=i;++j)
printf("*");

printf("\n");
}

for(i=1;i<=n;++i)
{
int j=0;
for(j=1;j<=2*i;++j)
printf(" ");
for(j=1;j<=(n+1-i);++j)
printf("*");

printf("\n");

}

}
    return 0;
}
发表于 2024-08-24 12:04:01 回复(0)
int main() {
    int n = 0;
    while (scanf("%d", &n) == 1) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n - i; j++) {
                printf("  ");
            }
            for (int j = 0; j <= i; j++) {
                printf("*");
            }
            printf("\n");
        }
        for (int i = 0; i < n + 1; i++) {
            for (int j = 0; j < i; j++) {
                printf("  ");
            }
            for (int j = 0; j < n + 1 - i; j++) {
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2024-08-03 10:56:18 回复(0)
#include <stdio.h>

int main() {
    int n = 0;
    while (scanf("%d", &n) != EOF) 
    {
        //打印上半和中间部分
        for(int i = 0; i < n + 1; i++)
        {   
            for(int j = 0; j < n - i; j++)   
                printf("  ");
            for(int j = 0; j < i + 1; j++)   
                printf("*");

            printf("\n");
        }
        
        //打印下半
        for(int i = 0; i < n; i++)
        {    
            for(int j = 0; j < i + 1 ; j++)   
                printf("  ");
            for(int j = 0; j < n - i; j++)   
                printf("*");
            
            printf("\n");
        } 
    //此写法更加统一循环的书写风格,更易读懂吧吧吧     
    }
    return 0;
}

发表于 2024-06-20 18:12:15 回复(0)
#define _CRT_SECURE_NO_WARNINGS
/*
思路 : 也可以分为上下两部分 上面n行 下面n+1行
由空格和星号组成 两个控制
一个控制打印每行星号一个控制打印空格
*/
# include <stdio.h>
int main()

{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        //上半部分 由空格和星号组成
        for (i = 0; i < n; i++)
        {
            int j = 0;
            //打印空格
            //分析 上半部分的 空格 与n是双倍关系
            //例如输入3 第一行是 6 个空格 第二行 4个空格 第三行 2个空格
            //for (j = 0; j < n * 2 - 2; j++) error
            //上面的代码 n*2-2 是不对的 空格数没有随着变化 所以改成
            //因为由题目可知 
            //当i为0的时候 正好是6 个空格 i为1的时候 为4个空格
            //......
            for(j = 0; j < n*2-2*i;j++)
            {
                printf(" ");
            }
            for (j = 0; j <= i; j++)
            {
                printf("*");
            }
            printf("\n");

        }
        for (i = 0; i < n + 1; i++)
        {
            int j = 0;
            //控制空格
            //例如输入 3 
            //空格数从 0 2 4 6 以此累积
            //从上半部分可以看出 与i有关 2倍的关系
            //for (j = 0; j < n + 2 * i; j++) error
            //for (j = 0; j < n - 2 * i; j++) error
            //上面两个代码是错误的 
            //原因是因为不能出现 n 因为一出现n的话 n是用户输入的数值 
            //就代表有数值,也有空格数了 当 i为0的时候 正好打印4个星星
            //i为1的时候打印 三个星星 
            //空格数从 0 2 4 6 以此累积

            for (j = 0; j < 2 * i; j++)//正确
            {
                printf(" ");
            }
            //假如输入 3 
            //这里的for循环 中 n+1-i 它的第一行星星数 4 3 2 1 
            //因为 以此递减的 而减去 i 正好
            for (j = 0; j < n + 1 - i; j++)
            {
                printf("*");
            }
            printf("\n");
        }
    }

    return 0;
}

发表于 2024-06-02 11:42:16 回复(0)
#include <stdio.h>
//这次分三个部分,上中下

int main() {
    int a;
    while (scanf("%d", &a) != EOF) 
    { 
        getchar();
        //上半部分
        for(int i=1;i<=a;i++)
        {
            for(int j=1;j<=a+1-i;j++)
            {
                printf("  ");
            }
            for(int k=1;k<=i;k++)
            {
                printf("*");
            }
            printf("\n");
        } 
        //中部
        for(int d=1;d<=a+1;d++)
        {
            printf("*");
        }
        printf("\n");
        //下部
        for(int x=1;x<=a;x++)
        {
            
            for(int y=1;y<=x;y++)
            {
                printf("  ");
            }
            for(int z=1;z<=a+1-x;z++)
            {
                printf("*");
            }
            printf("\n");    
        } 
    }
    return 0;
}

发表于 2024-05-22 21:33:29 回复(0)
#include <stdio.h>

int main() {
    int n, ret = 0, ass = 0;
    while (scanf("%d", &n) != EOF)
    {
        ret = n * 2;

        //上半部分,打印行
        for (int i = 0; i < n; i++)
        {
           if (i != 0)
                ret = ret - 2;
           // printf(" ");

            //打印列之打印空格
            for (int j = 0; j < ret; j++)
            {
                printf(" ");
            }
            //之打印*
            for (int k = 0; k <= i; k++)
            {
                printf("*");
            }
            printf("\n");
        }

        //之间部分
        for (int i = 0; i < n + 1; i++)
        {
            printf("*");
        }
        printf("\n");

        //下半部分,打印行
        for (int i = n; i > 0; i--)
        {
            ass += 2;
            //打印列之打印空格
            for (int k = 0; k < ass; k++)
            {
                printf(" ");
            }

            //之打印*
            for (int j = i; j > 0; j--)
            {
                printf("*");
            }
            printf("\n");

        }

        //printf("\n");
    }
    return 0;
}

格式不对,麻烦。不知道哪里不对慢慢来咯
发表于 2024-05-07 23:30:35 回复(0)
#include <stdio.h>

int main(){
    int n = 0;
    int space = 0;//打印  的次数
    int k = 0;//打印*的次数
    while(scanf("%d",&n) == 1){
        for(int i = 0; i <= n * 2; i++){//共打印n * 2 + 1次
            space = i < n + 1 ? n - i : i - n;
            /*
            if(i < n + 1){
                space = n - i;
            }
            else{
                space = i - n
            }
            */
            if (i < n + 1){
                k = i + 1;
            }else{
                k--;
            }

            while(space--){
                printf("  ");
            }
            for(int j = 0; j < k; j++){
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}

编辑于 2024-04-23 13:08:32 回复(0)
#include <stdio.h>

int main()
{
	int input = 0;
	int i = 0;
	int j = 0;
	int tem = 0;

	//我们将箭型分为3个部分来看,分开实现
	// 上部 -- 有input行
	// 中部 -- 有1行
	// 下部 -- 有input行
	//
	while (scanf("%d", &input) == 1)
	{
		tem = 0;

		//上部
		for (i = 0; i < input; i++)
		{
			for (j = 0; j < input * 2 - tem; j++)//空格每行减少2位
			{
				printf(" ");
			}
			for (j = 0; j <= i; j++)//每行输出i个*号,但因为我们的i是从0开始数,所以使用<=i
			{
				printf("*");
			}
			tem += 2;
			printf("\n");
		}

		tem = 0;

		//下中部
		for (i = 0; i < input + 1; i++)
		{
			for (j = 0; j < tem; j++)//空格每行增加2位
			{
				printf(" ");
			}
			for (j = 0; j <= input - i ; j++)//*号每行减少1位,但因为i是从0开始,所以是<=i
			{
				printf("*");
			}
			tem += 2;
			printf("\n");
		}
	}
	return 0;
}

编辑于 2024-02-06 19:39:10 回复(0)
#include<stdio.h>
int main() {
    int num;
    int i, j, k;
    while (scanf("%d", &num) != EOF)
    {
        for (i = 0; i <= num;
                i++) {
            for (j = 0; j < num - i; j++) {
                printf("  ");
            }
            for (k = 0; k <= i; k++) {
                printf("*");
            }
            printf("\n");
        }
        for (i = 0; i < num; i++) {
            for (j = 0; j <= i; j++) {
                printf("  ");
            }
            for (k = 0; k < num - i; k++) {
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}

编辑于 2024-01-09 19:15:49 回复(0)
#include<stdio.h>
#include "math.h"
int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        //打印上半部(不包括最后一行);
        for (int i = 0; i < n ; i++) {
            for (int j = 0; j < 2 * n + 1; j++) {
                if (j >= 2 * (n - i) && j <= 2 * (n - i) + i) {
                    //每行*号个数i+1;
                    printf("*");
                } else {
                    printf(" ");
                }
            }
            printf("\n");
        }
        //打印下半部分(完整)
        for (int i = 0; i < n + 1; i++) {
            for (int j = 0; j < 2 * n + 1; j++) {
                if (j >= 2 * i && j <= 2 * i + (n - i)) {
                    //每行*号个数n+1-i;
                    printf("*");
                } else {
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

发表于 2023-12-26 14:46:30 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    int a = 0;
    while (scanf("%d", &n) != -1)
    {
        for (a = n; a > 0; a--)
        {
            int j = a;
            while (j)
            {
                printf("  ");
                j--;
            }
            int c = n - a;
            while (c >= 0)
            {
                printf("*");
                c--;
            }
            printf("\n");
        }
        int b = n;
        while (b >= 0)
        {
            printf("*");
            b--;
        }
        printf("\n");
        for (int a = 1; a <= n; a++)
        {
            int j = a;
            while (j)
            {
                printf("  ");
                j--;
            }
            int c = n - a;
            while (c >= 0)
            {
                printf("*");
                c--;
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2023-11-29 11:11:23 回复(0)