1,先打印个图形:
1 /* 2 * 3 *.*. 4 *..*..*.. 5 *...*...*... 6 */ 7 /* 8 解析: 9 1,由结构就可以看出应该设置几层循环,行是一层,星花是一层,星花后面的点又是一层 10 2,行的循环区间是【1,n】 11 3,星花的循环区间是【1,line】,即当前是第几行,就要打印几个星花 12 3,星花后点的长度是相同的,与行号相同,所以直接连续打印当前行号个点就可以了 13 */ 14 void printStardot(int n) 15 { 16 for(int line = 1;line <= n;++line) 17 { 18 for(int star = 1;star <= line;++star) 19 { 20 cout << "*"; 21 int dot = line; 22 while(--dot) 23 { 24 cout << "."; 25 } 26 } 27 cout << endl; 28 } 29 }
2,再打印个
1 /* 2 * 3 *** 4 ***** 5 ******* 6 */ 7 /* 8 解析: 9 1,指定行的星花的个数是line*2 -1 10 2,每一行的宽度是n*2-1,即最后一行的宽度 11 3,每一行的前后空格的个数是 ((n*2 - 1) - (line*2 - 1))/2 12 */ 13 void printfTower(int n) 14 { 15 int lineMaxWidth = n*2 - 1; 16 int blankNum = 0; 17 int starNum = 0; 18 19 for(int line = 1;line <= n;++line){ 20 starNum = line * 2 - 1; 21 blankNum = (lineMaxWidth - starNum)/2; 22 for(int i = 0;i < blankNum;++i){ 23 cout << " "; 24 } 25 for(int i = 0;i < starNum;++i){ 26 cout << "*"; 27 } 28 29 cout << endl; 30 } 31 }
如是而已~
这种问题,在做之前,先要找到其规律,并将变量之间的关系写出来,然后一蹴而就,直接写代码,成功率99%