Problem Description
把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。
Input
每行包含一个字符和一个整数n(0<n<41),不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。如果遇到@字符,则表示所做出来的样板三角形已经够了。
Output
每个样板三角形之间应空上一行,三角形的中间为空。显然行末没有多余的空格。
Sample Input
X 2
A 7
@
Sample Output
我的思路:
1.创建输入输出框架(实现代码都在这个框架内):
*代码上有注释
2.找到图的规律:
从输出示例看出每一行都由空格和符号组成,所以得从左边开始敲空格再敲字符,本行完事则回车进入下一轮循环执行下一行。
显然会用到循环嵌套和判断语句。
从第一个输出示例可知:要做到空心三角形则行数必须得超过2,最后都是字符没有空格。
从第二个输出示例可知:除了第一行和最后一行其余都是空格和两个字符组成,且两个字符中间还有空格。
#include<stdio.h>
int main()
{
char ch;
int G=0;//每一次输出空出一行时用来计时的
while(scanf("%c",&ch)&&ch!='@')//输入框架
{
int i=0,j=0,k=0,t=0,m=0,n=0;//将用到的计数变量定义到while函数中可每次都能回到初始值
scanf("%d",&n);
t=n;
for(i=0;i<n;i++)//控制行数的循环
{
if(i==0&&G!=0)//执行完一次任务就空出一行,首次输入时不需要空一行
{
printf("\n");
}
t--;//每一行最前的空格数递减直到为零
for(j=0;j<t;j++)
{
printf(" ");
}
printf("%c",ch);
if(n-1>1&&i<n-1) //确保不是第一行和最后一行,其余行的两个字符中间还有空格
{
if(i>0)
{
for(m=0;m<i*2-1;m++)//空格数是奇数
{
printf(" ");
}
}
}
if(n-1>1&&i==n-1)//最后一行全是由字符组成,空格换成字符
{
for(m=0;m<i*2-1;m++)
{
printf("%c",ch);
}
}
if(n-1==1&&i==n-1)//判断仅仅两行的三角形
{
for(m=0;m<i*2-1;m++)
{
printf("%c",ch);
}
}
if(i>0)//第一行就一个字符,避免多出一个字符
{
printf("%c",ch);
}
printf("\n");//每行完事回车
G++;//每个输出空一行时用的,避免第一次输入时就开始空一行
}
}
return 0;
}