我有一个问题与此代码,它跳到3星号,和我想要的程序遵循星号顺序.如1到2到3星号等.我想要的程序只接受数字和不特殊字符.
*
**
***
****
*****
****
***
**
*
所需输出示例^
代码:
#include <iostream>
using namespace std;
int main() {
cout << "Enter a number: ";
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) {
cout << " ";
}
for (int j = 1; j <= 2 * i - 1; j++) {
cout << "*";
}
cout << endl;
}
for (int i = n - 1; i >= 1; i--) {
for (int j = 1; j <= n - i; j++) {
cout << " ";
}
for (int j = 1; j <= 2 * i - 1; j++) {
cout << "*";
}
cout << endl;
}
return 0;
}
例如,我输入5,星号就不跟着了,它只是跳到3,例如,1,3,等等。
1条答案
按热度按时间mwg9r5ms1#
让我给你解释一下如何解决这个问题。
让我们把大问题分解成小问题。
如果我们只看星号的个数,也就是说,只看字符,而不看缩进或前导空格,那么我们可以看到输入5:
所以我们需要一个函数,它能把行数转换成星号的个数,然后我们看到一个模式,看起来像金字塔或者三角形。
这就引出了三角函数,请阅读here,在这类函数中,"绝对值"起着重要作用,在C++中,我们可以使用
std::abs
。此外,我们可以看到,创建菱形的前导空格数就是给定的宽度减去星号数,再除以2。
有了这些知识,我们现在可以进行以下简单计算:
此外,我们可以看到行数是宽度的2倍。
有了这些,我们就可以编写一个简单的程序,只使用一个for循环。
请注意,在创建字符串时,我们使用了它的constructor number 2。在这里,您可以指定
std::string
的长度和填充字符。如果你不想使用字符串,那么你需要再次添加2个
for
循环。请参阅:
而且,如果您甚至没有
std::abs
,您可以自己创建这样的函数。那么代码就是
输出与您指定的相同。请查找宽度为5的最后一个示例:
这里宽度为20: