题目及翻译
题面
把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。。
输入
每行包含一个字符和一个整数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