我的任务是在广场内的广场内画广场。看起来像这样。对于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;
}
,我必须在重复空格和&#34; *&#34;之间使用一些联系,我知道我必须使用数学表达式和布尔的代数&gt;我只需要一个提示,不要解决这个问题。我应该尝试将这个形状分成4或2个部分(最大的问题是这个最小的正方形或空白区域。它重复偶数和奇数,但对于偶数smoetimes它的balnk空间,有点像它的小方块。我希望你了解我的英语,并希望会有某种暗示或帮助......:D
答案 0 :(得分:0)
这样做的一种方法是:
#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;
}
基本上,做这样的事情的最简单方法是有一个函数(在数学意义上),它告诉你是否需要在某个坐标处填充一个点。如果你有这个功能,你只需循环遍历整个方块的坐标,并使用该函数来决定是在那里打印星号还是空格字符。
在你的情况下,这个功能很容易构建;你可以确定每个点距离最外面正方形周长的距离,并且当且仅当距离可以被2整除时才填充该坐标。