题目:空心三角形
比较简单,第一行和最后一行特殊输出,中间行用for就可以了。
要细心,注意题目的描述是两个图形间一个空行,所以最后一个图形就不要加空行了,笔者因此一个PE, hdoj上有的题目没描述清楚,最后一个case也要输出一个空行,没有空行还直接WA。所以多细致点。
用了个字符数组来接受图形字符,因此避免了用getchar()将空格过滤。
最开始用char ch; scanf("%s", &ch);在程序退出的时候会提示变量ch的值被破坏,是因为ch只能存储一个字符而用%s的参数来接收的话还应该有个 '\0' 吧。
使用scanf需要多注意,可以参考http://stackoverflow.com/questions/4644475/error-stack-around-the-variable-string-was-corrupted
http://stackoverflow.com/questions/5406935/reading-a-string-with-scanf/5407121#5407121
觉得平时编程可以多变换形式,巩固自己对基础函数的用法。
0MS 228K
代码如下:
#include<cstdio>
using namespace std;
int main()
{
char ch[2];
int num, cnt=0;
while(scanf("%s", &ch) && ch[0]!='@')
{
cnt > 0 ? printf("\n"): 0;
scanf("%d", &num);
for(int i=1; i<=num; ++i)
{
if(i==1)
{
for(int j=0; j<num-1; ++j)
printf(" ");
printf("%c\n", ch[0]);
}
else if(i<num)
{
for(int j=0; j<num-i; ++j)
printf(" ");
printf("%c", ch[0]);
for(int j=0; j<2*(i-1)-1; ++j)
printf(" ");
printf("%c\n", ch[0]);
}
else
{
for(int j=0; j<2*i-1; ++j)
printf("%c", ch[0]);
printf("\n");
}
}
++cnt;
}
return 0;
}