HDU——2091空心三角形

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

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

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

Sample Input
  
  
X 2 A 7 @
 

Sample Output
  
  
X XXX   A A A A A A A A A A A AAAAAAAAAAAAA

搞了半天总是WA,看看discuss里大神们都是PE,为毛我总是WA?

后来陆续发现了三个问题

1、输出之后没有清空字符数组,导致下一次遍历修改图形会被上次的数据影响,比如输入A 6之后再来一组C 5,这样最后会多输出一个C。之前没发现······

2、最坑爹的,没看见题目中说的“显然行末没有多余的空格”。因此最后的输出阶段循环条件从j<2*n变成j<n+i(即一行输完所需字符后不要再输出后面的空格)

3、看了discuss才知道这也是个坑,这三角形的空行是介于输入与输出之间的,不是每组数据之间。

代码:

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int main(void)
{
    int n,i,j,Count=0;
    char ch,ma[120][120];
    while(cin>>ch)
    {    
        if(ch=='@')
        {
            break;
        }    
        Count++;
        cin>>n;    
        if(Count!=1)
            cout<<'\n';    
        for (i=0; i<n; i++)
        {
            if (i!=n-1)
                for (j=0; j<2*n; j++)
                {
                    if ((j==n-i-1)||(j==n+i-1))
                        ma[i][j]=ch;
                    else
                         ma[i][j]=' ';
                }
            else
                 for (j=0; j<2*n-1; j++)
                 {
                     ma[i][j]=ch;
                 }        
        }
        for (i=0; i<n; i++)
        {
            for (j=0; j<n+i; j++)
            {
                cout<<ma[i][j];
            }
            cout<<'\n';
        }        
          memset(ma,' ',sizeof(ma));
    }
    return 0;
}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值