我必须使用带有循环的C ++中的astrisk *制作一个V ..
实施例: http://i.imgur.com/4QxnsKz.png
任何人都知道它是如何完成的?
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
for(int i = 10; i <= 20; i++){
cout << setw(i);
cout << "***" << endl;
}
for(int i = 30; i >= 20; i--){
cout << setw(i);
cout << "***" << endl;
}
return 0;
}
我认为我的主要麻烦在于如何制作空间?如何在for循环期间动态增加它们?
答案 0 :(得分:1)
for (int i=0;i<10;i++) {
for (int j=0; j<i*2; j++)
cout << " ";
cout << "***";
for (int j=0; j<2+(10-1-i)*4; j++)
cout << " ";
cout << "***" << endl;
}
从第1行到最后一行的星号之前的空格是:0,2,4,6 ...... 那是lineNumber * 2 = i * 2次。
我们有十行。从最后到第一个星星之间的空间是:2,6,10,14 ...... 那是2作为常数+(totalNumberofLines-1-currentline)* 4。 2是空格的起始数。 4是范围。 -1这里因为最后一行是9和10-9 = 1。取决于循环计数器的起点。我希望这可以解释。
答案 1 :(得分:1)
不是最好的,但我尝试:
int main()
{
for (int i = 0, s = 17, w = 4; i < 10; ++i, s -= 2, ++w)
{
std::string space;
if (s >= 0)
space.assign(s, ' ');
else
space = "";
std::cout << std::right
<< std::setw(w)
<< "***" << space << ((i != 9) ? "***\n" : "**");
}
}