我确实对我的代码进行了很多修改,但是我得不到我想要的东西:
示例如果我将7放在变量N中,结果将显示
*
**
* *
* *
* *
* *
*******
这是我的代码
#include <iostream>
using namespace std;
int main() {
for (int x=1; x<=N; x++){
cout<<"*";
for (int y=1; y<x; y++){
cout<<"*";
}
cout<<"\n";
}
return 0;
}
我必须添加到我的代码中的结果如上?
答案 0 :(得分:2)
由于其他人已经建议这可能是家庭作业,这里有一些提示:
int main()
已足够,main()
没有返回类型无效。-Wall -pedantic
应该足够了(即,它会发现上述错误),但-Wextra
也很有用。std::
的习惯。 (例如,作业可能要求您拥有distance
功能,这可能与std::distance
冲突。x
,y
和N
很好,但会降低可读性。它还可以帮助您直观地了解您要解决的问题。我们知道y
总是最多x
,因为每行的字符数应该等于当前行。例如,第7行应包含7个星号。如果y
不等于零或x - 1
,我们只会打印一个空格,因为这应该是我们的&#34; border&#34;。最后,最后一行应包含所有星号。
// The amount of asterisks per line is [1, N]
for (int x = 1; x <= N; x++)
{
// x is the amount of characters we want to print per line
for (int y = 0; y < x; y++)
{
// If we at the beginning or end of a line, this is our "border".
// Print an asterisk.
if (y == 0 || (y + 1 == x))
std::cout << "*";
else
{
// Otherwise we are "inside" the triangle.
// If this is the last line, print all asterisks
if (x == N)
std::cout << "*";
else
std::cout << " ";
}
}
std::cout << "\n";
}
另外,正如另一个答案所示,您可以通过将条件置于单个变量中来消除混淆if
结构的需要。
bool space_or_asterisk = (y == 0 || (y + 1 == x) || x == N);
std::cout << (space_or_asterisk ? '*' : ' ');
答案 1 :(得分:2)
虽然您已经得到了几个有效的答案,但如果您消除令人困惑的if
/ then
/ else
语句,逻辑可能会更简单:< / p>
#include <iostream>
int main() {
static const char chars[] = "* ";
static const int size = 7;
for (int i=0; i<size; i++) {
for (int j=0; j<size; j++)
std::cout << chars[j!=0 && i!=j && bool(i+1-size)];
std::cout << "\n";
}
}
虽然逻辑显然更简单,但如果你把它作为家庭作业,你仍然要确保学习它足以回答任何问题。
答案 2 :(得分:0)
main() {
for (int x=1; x<=N; x++){
for (int y=1; y<=x; y++){
if(y==1||y==x||x==N){
cout<<"*";
}else{
cout<<"*";
}
}
cout<<"\n";
}
return 0;
}