带有偶数c++的星号菱形
asterisk diamond with even number c++
本文关键字:c++ 更新时间:2023-10-16
我正试图弄清楚如何使用偶数来制作这样的东西;
输入制作菱形图案所需的行数:6
*
***
*****
*****
***
*
我一直在多排。
*
***
*****
*******
*****
***
*
这是代码:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int NUM = 6;
int i=0, j=0;
//NUM=NUM-1;
for(i=-NUM; i<=NUM-1; i++)
{
//cout<<i<<"part1";
for(j=-NUM; j<=NUM-1; j++)
{
//cout<<j<<"part2";
if(abs(i)+abs(j)<=((NUM-1)/2+1))
{
cout<<"*";}
else
{
cout<<" ";}
}
cout<<endl;
}
system("PAUSE");
return 0;
}
有什么提示吗?
将每一行设想为两个数字:x
)空间数量和y
)恒星数量。因此,对于你的例子,你会得到:
i x y
------
0: 2 1
1: 1 3
2: 0 5
2: 0 5
1: 1 3
0: 2 1
观察下半部分只是上半部分"倒置",这意味着倒计数。
现在,创建一个从i
转换为x
和y
的表达式。例如,x=2-i
似乎可以工作(它可能更复杂,但现在让我们尝试一下)。对y
执行类似的操作。现在使用以下psuedo代码编写代码。
for i=0..2
for x (which is some expression involving i)
write a space
for y (which is some expression involving i)
write a star
write a newline
for i=2..0
(repeat above, better yet, write a function to do it call it twice
或者,当表看起来像时,您可以对计算机x
和y
使用if语句
i x y
------
0: 2 1
1: 1 3
2: 0 5
3: 0 5
4: 1 3
5: 2 1
例如:x
为2-i
,当i<3和CCD_ 12。
由于您的输出是对称的,因此有助于划分算法,使其以对称的方式工作。
对于N = 6
,需要6
行和5
列。
你可以让外循环中的索引上升0, 1, 2
,然后下降2, 1, 0
。
你可以把内循环的索引设为-2, -1, 0, 1, 2
。
然后,给定i
(外环的索引)和j
(内环的索引),如果
(i+j) < 0 || (i+j) > i*2
现在程序可以是:
int isWhite(int i, int j, int NUM)
{
return ((i+j) < 0 || (i+j) > i*2);
}
void drawDots(int i, int NUM)
{
// j = -2, -1, 0, 1, 2
int j = 0;
for( j = -(NUM-1)/2; j < NUM/2; ++j)
{
if( isWhite(i, j, NUM) )
{
cout<<" ";
}
else
{
cout<<"*";
}
}
}
int main()
{
int NUM = 6;
int i=0;
// i = 0, 1, 2
for ( i = 0; i < NUM/2; ++i )
{
drawDots(i, NUM);
cout<<endl;
}
// i = 2, 1, 0
for ( i = NUM/2-1; i >= 0; --i )
{
drawDots(i, NUM);
cout<<endl;
}
return 0;
}
更新
如果您不介意将if/else
块替换为使用本地数组数据的代码,那么drawDots
可以更加精简。
void drawDots(int i, int NUM)
{
char s[] = "* ";
// j = -2, -1, 0, 1, 2
int j = 0;
for( j = -(NUM-1)/2; j < NUM/2; ++j)
{
cout << s[isWhite(i, j, NUM)];
}
}
相关文章:
- 没有找到相关文章