箭形图案
箭形图案
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; }
总结:
复杂图案的绘制,分而治之,找出每行的规律使用循环控制即可。