我必须在 C++ 中在正方形内部绘制正方形

I have to draw square inside of square in c++

我的任务是在正方形内部绘制正方形等。它看起来像这样。对于输入的数字 10,我们要绘制:

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

我设法编写了这个代码:

int n;
std::cin>>n;


for(int i=0;i<n;i++) 
   std::cout<<"*";

std::cout<<std::endl <<"*";

for(int i=0;i<n-2;i++) 
    std::cout<<" ";

std::cout<<"*"<<std::endl <<"*";

for(int i=0;i<n-2;i++)
   std::cout<<" ";

std::cout<<"*"<<std::endl;

for(int i=0;i<n;i++)
    std::cout<<"*";

std::cout<<std::endl;

return 0;
}

,我必须在空白 spaces 和“*”的重复之间使用某种联系,我知道我必须使用数学表达式和 bool 的代数 > 我只需要一个提示不要解决我这个问题。我应该尝试将这个形状分成 4 部分还是 2 部分(最大的问题是这个最小的正方形或空白 space。它重复偶数和奇数,但对于偶数 smoetimes 它是 balnk space,有时它很小广场。我希望你能理解我的英语,并希望能得到一些提示或帮助...:D

一种方法是这样的:

#include <iostream>
#include <algorithm>    // for std::min()

int dist (int dim, int r, int c)
{
    return std::min(std::min(r, dim-1-r), std::min(c, dim-1-c));
}

char char_at_point (int dim, int r, int c)
{
    if ((dist(dim, r, c) % 2) == 0) return '*';
    else return ' ';
}

int main() {
    int dim = 0;
    std::cin >> dim;

    for (int r = 0; r < dim; ++r)
    {
        for (int c = 0; c < dim; ++c)
            std::cout << char_at_point(dim, r, c);
        std::cout << std::endl;
    }
    return 0;
}

基本上,做这样的事情最简单的方法是有一个函数(在数学意义上)告诉你是否需要在某个坐标处填充一个点。如果你有那个函数,你只需遍历整个正方形的坐标并使用该函数来决定是在那里打印一个星号还是一个 space 字符。

在您的情况下,该函数的构建非常简单;您可以确定每个点与最外层正方形周长的距离,并在且仅当距离可被二整除时填充该坐标。