#include
/*
其实打印三角形啦,菱形啦,思路都是一样一样的,
都是按行找规律,然后按照每行的规律按行打印就好了。。。
比如以下是每条边有n=4个*的菱形(边长是4)。
c语言都是按行输出的,我们只要分析第i行要输出些什么就好了:
0123456
0 *
1 * *
2 * *
3* *
4 * *
5 * *
6 *
从上图可以看出来,
第0行要输出3个空格,1个*
第1行要输出2个空格,1个*,1个空格,1个*
第2行要输出1个空格,1个*,3个空格,1个*
第3行要输出0个空格,1个*,5个空格,1个*
第4行要输出1个空格,1个*,3个空格,1个*
第5行要输出2个空格,1个*,1个空格,1个*
第6行要输出3个空格,1个*
再看上面得出的规律,除了第0行和第6行,其他的都是同一个模式:
对于第i行,打印k1个空格,1个*,k2个空格,1个*。
而且从第4行开始就跟上面对称了,我们完全可以只分析0~3行:
在第i = [0, 3]行内:
对于第i行,打印k1=n-i-1个空格,1个*,k2=2*i-1个空格,1个*。
例外:第0行得到的k2=-1小于0,此时不打印空格也不打印第二个*。
然后我们就可以弄一个小函数啦:
*/
void printline(int i, int n) {
int k1 = n - 1 - i;
int k2 = 2 * i - 1;
int j;
//打印k1个空格
for(j=0; jprintf(" ");
//打印一个*
printf("*");
//如果k2小于0就不用打印空格和后面的*啦
if (k2 > 0) {
//打印k2个空格
for(j=0; jprintf(" ");
printf("*");
}
printf("\n");
}
int main()
{
const int n = 4;
int i;
// 先打印0~n-1
for(i=0; iprintline(i, n);
// 然后打印n-2~0
for(i=n-2; i>=0; i--)
printline(i, n);
return 0;
}
风格充满ntuj6sxrtdhxdf