已知一个整数n,你要根据n打印出n阶的实心菱形。
输入格式:
只有一个整数n(0<n<40,代表要打印的菱形阶数)。测试用例保证合法。
输出格式:
n阶实心菱形(占2乘n-1行)。
样例">输入样例:
5
输出样例:
*
***
*****
*******
*********
*******
*****
***
*
代码如下:
#include<stdio.h>
int main()
{
int i, j, k, n;
scanf("%d", &n);//输入阶数
//打印上半部分,就是打印三角形
for (i = 1; i <= n; i++)
{
//先打印空格
for (j = i; j < n; j++)
printf(" ");
for (k = 2 * i - 1; k > 0; k--)
printf("*");
printf("\n");
}
//打印下半部分
k = 2 * n - 3;
int zh = k;
for (i--; i < 2 * n - 1; i++,zh-=2)
//i--是为了抵消上个循环中的最后一次自增
{
for (j = i; j >= n; j--)
printf(" ");
for (k=zh; k > 0; k--)
printf("*");
printf("\n");
}
return 0;
}
打印菱形就是利用循环分别打印空格和*号,可以把它拆分为打印两个三角形;
寻找到规律即可
上半个三角形的规律为:
由此推出打印空格的数量
由此推出打印*的个数 (上图中菱形即*笔误)
下半个三角形的规律为:
空格的个数为行数减去阶数,*的个数为:在随着行数的增加而减少(增加一行,减少2个),并且第一行*个数为2*n-3;
经过小编的解释应该明白了!
然后在和大家分享一个问题 :
就是小编通常搞不明白for 循环到底对循环几次
例如:for(i=0;i<n;i++) for(i=0;i<=n;i++) for(i=1;i<n;i++) for(i=1;i<n;i++)
for(i=a;i<b;i++) 我会混淆就很迷!!
分享我的解决方法:
int i,n = 10;
int s1 = 0, s2 = 0, s3 = 0, s4 = 0;
for (i = 0; i < n; i++)
s1++;
printf("%d\n", s1);
for (i = 0; i <= n; i++)
s3++;
printf("%d\n", s3);
for (i = 1; i < n; i++)
s2++;
printf("%d\n", s2);
for (i = 1; i <=n; i++)
s4++;
printf("%d\n", s4);
上述代码的运行结果为:
所有这个只是小编的困惑,,仅供参考,
这是小编自己写的代码,不够简洁但是思路比较清晰(如有错误,欢迎指正)