我是靠谱客的博主 坚定皮皮虾,最近开发中收集的这篇文章主要介绍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才知道这也是个坑,这三角形的空行是介于输入与输出之间的,不是每组数据之间。

附上代码

(寒假刚开始自学C++,尽量用C++的东西了)

#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;
}

转载于:https://www.cnblogs.com/Blackops/p/5255226.html

最后

以上就是坚定皮皮虾为你收集整理的HDU 2091 空心三角形(模拟)的全部内容,希望文章能够帮你解决HDU 2091 空心三角形(模拟)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部