hdu 2091 (C语言) 空心三角形

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;
} 
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值