您好我正在尝试创建一个平行四边形,到目前为止我有点麻烦
void stars(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i > j) {
cout << " ";
}
else cout << "*";
}
cout << endl;
}
}
所以星星(7)打印
*******
******
*****
****
***
**
*
然而我需要它像这样打印
*******
*******
*******
*******
*******
*******
*******
我的功能是正确地移动空间,但它也减少了恒星的数量,我怎样才能继续移动恒星而不会丢失恒星的数量?
答案 0 :(得分:3)
不要让印刷明星有条件。打印i
个空格,然后打印n
个星号。
for(int i = 0; i < n; ++i) {
for(int j = 0; j < i; ++j) {
cout << ' ';
}
for(int j = 0; j < n; ++j) {
cout << '*';
}
cout << '\n';
}
话虽如此,这并不是非常易读,我宁愿选择:(或者Lassie的回答)
string nstars(n, '*');
for(int i = 0; i < n; ++i) {
cout << string(i, ' ') << nstars << '\n';
}
这会创建std::string
个i
个空格和n
个星星。它带来了额外分配的成本,但可读性通常更为重要,特别是对于小型玩具项目。
如果您更多地了解stdlib算法:
for(int i = 0; i < n; ++i) {
fill_n(ostream_iterator<char>(cout), i, ' ');
fill_n(ostream_iterator<char>(cout), n, '*');
cout << '\n';
}
我不认为这应该比第一个循环更糟糕,但对新手来说可能看起来很可怕。
答案 1 :(得分:1)
#include <iostream>
#include <iomanip>
#include <string>
void stars (int n)
{
std::string s(n,'*'); // construct it only 1 time
for(int i=0; i<n; ++i)
std::cout << std::setw(n+i) << s << std::endl;
}
int main ()
{
stars(7);
}
答案 2 :(得分:0)
看看这个:
void stars(int n)
{
for(int i =0; i < n; i++, cout << "\n")
for(int j = 0-i; j < n; j++)
if(j < 0) cout << " ";
else cout << "*";
}