HDU2091 空心三角形(简单打印)[C,C++,Java]

题目及翻译

题面

把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。。

输入

每行包含一个字符和一个整数n(0<n<41),不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。如果遇到@字符,则表示所做出来的样板三角形已经够了。

输出

每个样板三角形之间应空上一行,三角形的中间为空。显然行末没有多余的空格。

输入样例

X 2
A 7
@

输出样例

 X
XXX
 
      A
     A A
    A   A
   A     A
  A       A
 A         A
AAAAAAAAAAAAA

题目思路

把图片分为三个部分,计算获得其打印规律:
1.头:由(n - 1)个空格 + 1个字符组成。
2.身:由(n - i)个空格 + 1个字符 + (i * 2 - 1) 个空格 + 1个字符 组成。
i为第i行,由于第一行和最后一行不在这部分,所以循环里有(int i=0;i<n-1;++i)
3.脚:由(n * 2 - 1)个字符组成。

注意事项

1.如果是获取单个字符串,要记得解决换行符\n。
2.每个样例中间要求多一次换行。

AC代码

C

用时0MS 内存1212K 长度599B

#include<stdio.h>
int main(){
    static char f;
    static int n;
    static bool Space = false;
    while((f = getchar()) != '@'){//获取一个字符,并判断是否为终止符'@'
        scanf("%d",&n);//输入三角形的size
        getchar();//获取换行符\n
        if (Space == false)Space = true;//这里是用于打印每个样例中间的空行
        else putchar('\n');
        if(n == 1){//这里是特判size为1时,三角形直接输出一个字符
            putchar(f);
            putchar('\n');
            continue;
        }
        for(int i=0;i<n-1;++i)putchar(' ');//输出头部分
        putchar(f);
        putchar('\n');
        for(int i=1;i<n-1;++i){//输出身部分
            for(int j=1;j<n-i;++j)putchar(' ');
            putchar(f);
            for(int j=0;j<i*2-1;++j)putchar(' ');
            putchar(f);
            putchar('\n');
        }
        for(int i=0;i<n*2-1;++i)putchar(f);//输出脚部分
        putchar('\n');
    }
    return 0;
}

C++

用时0MS 内存1400K 长度541B

#include<iostream>
using namespace std;
int main(){
	static char f;
	static int n;
	static bool Space = false;
	while(cin>>f,f != '@'){//获取一个字符,并判断是否为终止符'@'
		cin>>n;//输入三角形的size
//		getchar();----因为有cin,这里无需获取换行符了
		if (Space == false)Space = true;//这里是用于打印每个样例中间的空行
		else cout<<endl;
		if(n == 1){//这里是特判size为1时,三角形直接输出一个字符
			cout<<f<<endl;
			continue;
		}
		for(int i=0;i<n-1;++i)cout<<' ';//输出头部分
		cout<<f<<endl;
		for(int i=1;i<n-1;++i){//输出身部分
			for(int j=1;j<n-i;++j)cout<<' ';
			cout<<f;
			for(int j=0;j<i*2-1;++j)cout<<' ';
			cout<<f<<endl;
		}
		for(int i=0;i<n*2-1;++i)cout<<f;//输出脚部分
		cout<<endl;
	}
	return 0;
}

Java

用时296MS 内存9748K 长度1376B

import java.util.Scanner;

public class Main {
    public static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        char f;
        int n;
        boolean Space = false;
        String getLine = new String();
        while(sc.hasNext()){//输入到文件尾
            getLine = sc.nextLine();//获取一整行
            if (getLine.charAt(0) == '@')return;//判断终止符
            f = getLine.charAt(0);//f获取为所需字符
            n = Integer.parseInt(getLine.substring(2));
            //n获取为所需数字,这里是把第2(起始位0)个字符开始的一整行转化为数字
            if (Space == false)Space = true;//这里是用于打印每个样例中间的空行
            else System.out.println();
            if (n == 1) {//这里是特判size为1时,三角形直接输出一个字符
                System.out.println(f);
                continue;
            }
            for(int i=0;i<n-1;++i)System.out.print(' ');//输出头部分
            System.out.println(f);
            for(int i=1;i<n-1;++i){//输出身部分
                for(int j=1;j<n-i;++j)System.out.print(' ');
                System.out.print(f);
                for(int j=0;j<i*2-1;++j)System.out.print(' ');
                System.out.println(f);
            }
            for(int i=0;i<n*2-1;++i)System.out.print(f);//输出脚部分
            System.out.println();
        }
    }
}

本文作者 CSDN@扶她小藜
个人主页链接 https://blog.csdn.net/weixin_44579869

发布了15 篇原创文章 · 获赞 2 · 访问量 732

猜你喜欢

转载自blog.csdn.net/weixin_44579869/article/details/90714568