首页 > 试题广场 >

字符圣诞树

[编程题]字符圣诞树
  • 热度指数:58900 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一个字符,用它构造一个边长为5的三角形圣诞树。

数据范围:保证输入的字符是一个 char 类型的值

输入描述:
输入只有一行,一个字符。


输出描述:
该字符构成的三角形圣诞树。
示例1

输入

1

输出

    1
   1 1
  1 1 1
 1 1 1 1
1 1 1 1 1
#include <stdio.h>

int main()
{
    char a = 0;
    int i = 1;
    int s = 4;
    int n = 4;
    int z = 4;
    int y = 4;
    int t = 4;
    scanf("%c",&a);
    while (i <= 5)
    {
        char arr[10] = "         ";
        arr[s] = a;
        arr[n] = a;
        s--;
        n++;
        if (i >= 3)
        {
            arr[z] = a;
            arr[y] = a;
            z++;
            y--;
        }
        if (i == 5)
        {
            arr[t] = a;
        }
        printf("%s\n",arr);
        i++;
    }
    return 0;
}
发表于 2025-01-22 22:44:26 回复(0)
#include <stdio.h>
int main()
{
char a;
scanf("%c", &a);
for (int i = 1; i <= 5; i++)
{
for (int j = 5 - i; j>0; j--)
printf(" ");
for (int m = 1; m <= i; m++)
printf("%c", a);
printf("\n");
}
return 0;
}
为啥运行出来的和示例的不一样呢
发表于 2024-12-10 20:38:43 回复(1)
#include<stdio.h>

int main() {
	char n = 0;
	scanf("%c", &n);

	for (int i = 1; i <= 5; i++) {
		for (int j = 0; j < 5 - i; j++) {
			printf(" ");
		}
		for (int k = 0; k < i; k++) {
			printf("%c ", n);
		}
		printf("\n");
	}

	return 0;
}

发表于 2024-07-16 11:30:20 回复(0)
#include <stdio.h>

int main(){
    char a;
    scanf("%c",&a);
    for(int x=0;x<5;x++){
        for(int z=0;z<5-x-1;z++){
            printf(" ");
        }
        for(int y=0;y<=x;y++){
            printf("%c ",a);
        }
        printf("\n");
    }
}
编辑于 2024-03-31 19:21:24 回复(0)
#include <stdio.h>

int main()
{
    int i = 0;
    int j = 0;
    int flag = 0;
    char n = 0;

    n = getchar();

    for (i = 0; i < 5; i++)//控制换行
    {
        //打印一整行
        for (j = 0; j < 4 - i; j++)//打印前面的空格
        {
            printf(" ");
        }
        flag = 1;
        for (j = 0; j < i * 2 + 1; j++)
        {
            if (flag == 1)
            {
                printf("%c", n);
                flag *= -1;
            }
            else
            {
                printf(" ");
                flag *= -1;
            }
        }
        printf("\n");
    }

    return 0;
}

发表于 2024-03-18 14:57:52 回复(0)
//可以打印n行的代码
#include<stdio.h>
int main()
{
    char a = 0;
    int  b = 0;
    printf("请输入字符:\n");
    scanf("%c", &a);
    printf("请输入一个数字:\n");
    scanf("%d", &b);
    int i = 0;//i用来计行数
    int j = 0;//j用进行字符前空格的输入
    int g = 0; //g是输出“字符+空格”用的
    for (i = 1; i < b+1; i++)
    {
        for (j = b + 1 - i; j > 0; j--)
        {
            printf(" ");
        }
        for (g = 0; g < i; g++)
        {
            printf("%c ", a);
        }
        printf("\n");
    }
    return 0;
}

发表于 2023-08-09 17:26:15 回复(3)
#include <stdio.h>
int main() {
    char a;
   scanf("%c", &a);  
    //一、暴力输出
       // printf("    %c\n", a );
       // printf("   %c %c\n", a, a );
       // printf("  %c %c %c\n", a, a, a );
       // printf(" %c %c %c %c\n", a, a, a, a );
       // printf("%c %c %c %c %c\n", a, a, a, a, a );
    //二、通用解法,输出 n 行,n = 5
     int i, j, g;

     for(i = 1; i <= 5; i++)//输出 n 行
     {

        for( j = 1; j <= 5 - i; j++)//输出空格,第 i 行输出 n - i 个空格
        {
            printf(" ");
        }

        for( g = 1; g <= i; g++)//输出字符与空格,第 i 行输出 i 个字符
        {
            printf("%c ", a);
        }

        printf("\n");//换行

     }
   
    return 0;
}

发表于 2023-07-06 23:14:49 回复(0)
#include <stdio.h>

int main() 
{
    char ch = '\0';
    scanf("%c",&ch);
    int i = 0;
    for(i = 0; i < 5;i++)
    {
        int j = 0;
        for(j = 0;j<4-i;j++)
        {
            printf(" ");
        }
        for(j=0;j<=i;j++)
        {
            printf("%c ",ch);
        }
        printf("\n");
    }
    return 0;
}

发表于 2023-01-27 17:16:59 回复(0)
#include <stdio.h>
int main()
{
    char a;
    scanf("%c",&a);
    int j,i;
    int s=0;
    for (i=1;i<=5;i++)
    {
       for(j=5-i;j>0;j--)
       printf(" ");
       for(s=1;s<=i;s++)
       {
       printf("%c",a);
       printf(" ");
       }
       printf("\n");
    }
    return 0;
}
发表于 2022-12-05 17:16:21 回复(0)
#include<stdio.h>
int main()
{
    char a;
    scanf("%c",&a);
    for(int i=1;i<=5;i++)
    {
        int j=i;
        int t=5-i;
        while(t!=0)
        {
            t--;
            printf(" ");
        }
        while(j!=0)
        {
            j--;
            printf("%c ",a);
        }
        puts("");
    }
    return 0;
}

发表于 2022-05-12 15:22:48 回复(0)
#include<stdio.h>
int main()
{
    char ch=0;
    ch=getchar();
    for(int i=1;i<=5;i++)
    {
        for(int j=5-i;j>0;j--)
        {
            putchar(' ');
        }
       for(int k=1;k<=i;k++)
       {
           printf("%c ",ch);
       }
        
        putchar('\n');
        
    }
    
    return 0;
}

发表于 2022-05-12 11:00:21 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    char a;
    int i, j;
    scanf("%c", &a);
    for (i = 1; i <= 5; i++)
    {
        for (j = 1; j <= 5-i; j++)
        {
            printf(" ");
        }
        for (j = 1; j <= i; j++)
        {
            printf("%c", a);
            printf(" ");
        }
        printf("\n");
    }
    return 0;
}
发表于 2022-02-28 18:55:59 回复(0)
#include<stdio.h>
#define LENGTH 5
void draw(char n);
int main(void)
{
    char n;
    scanf("%c", &n);
    
    draw(n);
    
    return 0;
}
void draw(char n){
    // 外层循环控制三角形的层数,这里定义三角形的层数为5层,符号常量,方便修改
    for(int i = 0; i < LENGTH; i++){
        for(int k = 0; k < LENGTH - 1 - i; k++)
            printf(" ");  // 打印字符三角形前面的空格,第一行4,第二行3,...,末行0
        
        for(int j=0; j <= i; j++){
            printf("%c", n);  // 循环打印字符三角形每行的字符
            
            // 循环打印字符与字符之间的空格,如果是最后一个字符则后面不打印空格了
            if(j != i)
                printf(" ");
        }
        printf("\n");  // 每完成一行的打印,换行
    }
}
这题目能写出来,基本上等腰三角形、斜边朝不同方向的直角三角形、菱形这些图形都是没什么太大问题的

题解:
计算机打印出来的纯文本每行都是很规律的,要想打印出题目中的三角形样子,就需要合理的填充空格,第一行只有一个1,前面肯定是要填充空格的,填充多少呢?可以发现第一行的1对应最后一行【第五行】的中心1,也就是第三个1,而每个1后面又都有空格,所以共计5个字符长度【三个1+2个空格】,但是打印第一行的1本身占用1个字符长度,所以得出结论第一行的1前面补4个空格。

以此类推,第二行补充3个,第三行补充2个,第四行补充1个,第五行补充0个空格
发表于 2022-01-27 21:58:16 回复(0)
#include<stdio.h>

int main()
{
    int a,i,j,m;
    scanf("%d",&a);
    for(i=0;i<5;i++)
    {
        for(j=0;j<4-i;j++)
        {
            printf(" ");
        }
        for(m=0;m<=i;m++)
        {
            printf("%d ",a);
        }
        printf("\n");
    }
    return 0;
}为什么把空格换成\t就不对了,想不通
发表于 2022-01-27 21:51:40 回复(0)
#include<stdio.h>
int main()
{ char a;
 scanf("%c",&a);
 printf("    %c\n   %c %c\n  %c %c %c\n %c %c %c %c\n%c %c %c %c %c",a,a,a,a,a,a,a,a,a,a,a,a,a,a,a);
 
    
}
发表于 2022-01-17 12:12:56 回复(0)
奇怪了,找不同也找不出来啊
发表于 2022-01-12 20:19:18 回复(4)
发表于 2022-01-01 19:20:20 回复(0)
#include <stdio.h>
int main(){
    char x;
    scanf("%c",&x);\\ 输入
    for(int i=1;i<=5;i++){\\五行
        for(int j=5-i;j>0;j--){\\五列
            printf(" ");\\注意空格
             
        }
        for(int m=1;m<=i;m++)
            printf("%c ",x);\\输出
            printf("\n");\\给换行
    }
}
发表于 2021-12-09 19:42:22 回复(0)
#include"stdio.h"
int main()
{
    int b=1,d,c;
    char a;
    printf("输入数值");
    scanf("%c",&a);
    for(b=1;b<=5;b++)//控制行数共有五行
    {
        for(d=5-b;d>=1;d--)//控制行内空格
        {
            printf(" ");
        }
        for(c=0;c<b;c++)//控制行内内容
        {
            printf("%c ",a);
        }
        printf("\n");
    }
    return 0;
}
为什么我在编译器上可以打印出来,但在这却是提交不通过呢 求解!
发表于 2021-12-05 15:27:29 回复(1)