打印两个反向空心矩形,然后在其内部打印两条对角线

Printing two reverse hollow rectangles then printing two diagonals inside them

本文关键字:打印 内部 两条 对角线 然后 两个 空心      更新时间:2023-10-16

我正在尝试编写用于构建两个空心矩形的代码。空心矩形画了两条对角线,一直画到一半。把它分成两个直角三角形和中间的另一个三角形。其中一个会向下反转。它看起来像:

********************
*       *  *       *
*      *    *      *
*     *      *     *
*    *        *    *
*   *          *   *
*  *            *  *
* *              * *
**                **
********************
********************
**                **
* *              * *
*  *            *  *
*   *          *   *
*    *        *    *
*     *      *     *
*      *    *      *
*       *  *       *
********************

有人能帮我写代码吗?宽度和长度由长度以上图像的用户为10宽度为20

我能够构建空心矩形;它们不是主要问题,当我想打印对角线时,问题就来了。尝试了各种条件,但都不起作用。

以下是一些利用垂直对称性的代码。full_j从上到下,i从左到右。边界很容易。对于上对角线,观察ij始终相等,从1,1开始。对于下对角线,观察i+j是一个常数,比如c,并且它经过i,j=length,1,因此经过c = length+1

void print_diagonals_in_rectangles(int width, int length)
{
int i, j, full_j;
for (full_j = -width; full_j <= width; ++full_j)
{
j = full_j;
if (j < 0)
j = -j;  // abs(full_j)
for (i = 1; i <= length; ++i)
{
if (j == 0)
printf(" ");  // empty in the center
else if (j == 1 || j == width || i == 1 || i == length  // the borders
|| i + j == length + 1 || i == j)  // the diagonals
printf("*");
else
printf(" ");  // all the rest empty
}
printf("n");
}
}

以下是它为10、20打印的内容:

********************
*       *  *       *
*      *    *      *
*     *      *     *
*    *        *    *
*   *          *   *
*  *            *  *
* *              * *
**                **
********************
********************
**                **
* *              * *
*  *            *  *
*   *          *   *
*    *        *    *
*     *      *     *
*      *    *      *
*       *  *       *
********************

对于7,7:

*******
**   **
* * * *
*  *  *
* * * *
**   **
*******
*******
**   **
* * * *
*  *  *
* * * *
**   **
*******

编辑:删除了使用三元运算符(…?…:…(的版本。