箭形图案
箭形图案
http://www.nowcoder.com/questionTerminal/a6d1081e0c9a42f19e42ed6cd91556c1
分析:
本题可以将该图案拆分成上下两部分,对于上半部分设置space,star变量记录空格和星号的个数,然后对应自增和自减,然后补全后面的空格公式可以写成2*n+1-space-star。
下半部分同理,重置space和star变量,然后对于自增和自减,补全空格输出即可。
题解:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 0;
//循环读入n
while(scanf("%d", &n) != EOF) {
//设置space,star值的初始值
int space = 2*n;
int star = 1;
//外循环开始遍历每一行
for(int i = 0; i < n+1; ++i) {
//挨个输出空格的个数
for(int j = 0; j < space; ++j)
printf(" ");
//挨个输出星号的个数
for(int j = 0; j < star; ++j)
printf("*");
//输出剩下的空格
for(int j = 0; j < 2*n+1-space-star; ++j)
printf(" ");
//更新下一行的空格数和星号个数
space -= 2;
star += 1;
printf("\n");
}
//下半部分的初值设置
space = 2;
star = n;
//外循环开始遍历每一行,内循环流程和上述一样
for(int i = 0; i < n; ++i) {
for(int j = 0; j < space; ++j)
printf(" ");
for(int j = 0; j < star; ++j)
printf("*");
for(int j = 0; j < 2*n+1-space-star; ++j)
printf(" ");
//更新下一行的空格和星号个数
space += 2;
star -= 1;
printf("\n");
}
}
return 0;
}总结:
复杂图案的绘制,分而治之,找出每行的规律使用循环控制即可。
