我需要以下列方式打印星号:
XXXXXXX
_xxxxx
__xxx
(7,5,3)
或
XXXXXX
_xxxx
__xx
(6,4,2)
顶部有一个星号的输入和一个行数的输入。底行上绝不能少于两个星号。
我意识到这需要一个嵌套的for
循环。
我有以下代码:
for (rows = 1; rows < ((toprow / 2) + (toprow % 2)); rows++)
{
for ()
cout << endl;
}
我很难搞清楚内部for
循环。
答案 0 :(得分:3)
for (rows = 1; rows < ((toprow / 2) + (toprow % 2)); rows++)
{
if(rows <= maxrows)
{
// first the leading underscores
for (int k=1; k<rows; ++k)
cout << "_";
// then the asterisks
for (int k=1; k <= toprow - 2*rows + 2; ++k)
cout << "*";
cout << endl;
}
}
编辑:您的外部循环不会迭代正确的行数。它应该是这样的:
for (int rows = 1; rows <= (toprow / 2); rows++)
...
答案 1 :(得分:0)
你可能想要这样的东西:
int initial = 7;
int copy = initial;
int rows = 3;
for (int i = 0; i < rows; i++)
{
std::cout << std::string(initial - copy, ' ')
<< std::string(copy, '*') << std::endl;
copy -= 2;
}
这假设行是作为有效输入提供的。
答案 2 :(得分:0)
使用此C代码作为参考。它将打印到行数或最后一行开始时小于2,以较早者为准。
#include<stdio.h>
int main()
{
//topstar have the number of stars in top row
int row=7;
int topstar=7;
int i,j,k,l,last;
for(i=0;i<row;i++)
{
//last contain the number of stars in last row
last=topstar - 2*i;
if(last<2)
break;
for(k=0;k<i;k++)
printf("_");
for(j=0;j<last;j++)
printf("*");
for(l=0;l<i;l++)
printf(" ");
printf("\n");
}
return 0;
}
此代码的输出为
答案 3 :(得分:0)
spaces = 0;
asterix = toprow;
for (rows = 1; rows < ((toprow / 2) + (toprow % 2)) && asterix > 1; rows++)
{
for (i = 0; i < spaces; i++)
print -;
for (i = 0; i < toprow; i++)
print *;
println
spaces+=2;
asterix -=2;
}