分析:
利用程序根据输入的整数,画出由字符*
构成的该整数阶的实心菱形。给出一个示例: n = 7 n=7 n=7。
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
我们将采取拆解问题,通过四个部分的组合最终拼出这个菱形。通过观察,可以看出不管给出的整数是多少,最终形成的图形一定是一由空格
和星星*
构成个正方形(记为s)。如图1所示。
基于此我们可以先将这两条对角线画出来,是不是就成功了一半了呢?这两条对角线也很容易画,一条线是 x = 3 ( n / 2 ) x=3(n/2) x=3(n/2),另一条是 y = n / 2 y=n/2 y=n/2。给出画对角线的代码:
for (int i = 0; i < n; i ++) {
// 画出十字架对角线
for (int j = 0; j < n; j ++) {
if (i == n / 2 || j == n / 2) res[i][j] = '*';
}
}
通过这一步画出的图形为:
*
*
*
* * * * * * *
*
*
*
拼出第二部分-左上角
有了这两条相交的对角线,我们只需要处理左上角需要描的点即可,然后利用相交的对角线通过关于 x x x轴对称与 y y y轴对称的方法映射到其他的三个区域!如图3所示。
那么该怎么计算左上角的该描的点呢?我们可以观察这三个点的坐标 ( 1 ,