Problem B: Print Graphics Problerm (II) 看懂直接学会for循环(超级重要)
反省: 这种类型的题一看就是for的嵌套循环.我在之前做过这道题,并且写了博客,当天整个过程都是没有问题的.不到两天就卡住了.可见自己还不够熟练
通过反省,再次整理自己的思维.找到解决这类题型的窍门.供大家参考
实现倒三角形
首先确定行列
外循环实现行数,内循环实现列数 (借鉴 李南江老师)
for(){ 外循环 实现行 //这个倒三角5行,9列
for(){ 内循环 实现列
}
}
再来看需要实现的效果.看第一个图形.是倒三角形
printf(" "); 打印次数不断增加
printf("+"); 打印次数不断减少
重点: 我们采用分层实现思想
先实现printf(" "); 可以看到空格的变化次数是有外循环i一样的(找到函数关系 y=x),由此输入代码
for(w=0;w<i;w++)
{
printf(" ");
}
再实现printf("+"); 可以看到函数关系为(y=2x-z),由此输入代码
h =i+w+1 ;
for(j=0;j<2*a-h;j++)
{
printf("+");
}
简约表达: 将要实现的内容分层,将分层的部分进行函数分析.只要可以实现内容展示,管他什么函数
粗浅之建
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,i,j,w,h;
while(scanf("%d",&a)!=EOF && a!=0) // 这点值得记住
{
if(a%2==0)
{
for(i=0; i<a; i++)
{
for(j=i+1; j<a; j++)
{
printf(" ");
}
j=i+1;
for(w=0; w<j+i; w++)
{
printf("+");
}
printf("\n");
}
}
else
{
for(i=0; i<a; i++)
{
for(w=0;w<i;w++)
{
printf(" ");
}
h =i+w+1 ;
for(j=0;j<2*a-h;j++)
{
printf("+");
}
printf("\n");
}
}
}
return 0;
}