2015-07-05 221 views
-1

我正在学习C++编程,因此我为自己写了一本书来学习它。我已经完成了其描述了使用的if else循环等。 我停留在这个特定问题的流量控制章节: -如何打印倒三角?

Write a Program To print the following :-

@@@@@@@ 
@@@@@ 
    @@@ 
    @ 

我怎样才能做到这一点只使用循环,如果其他语句在C++中。

我发现每行都有两个@和更多的空间。

我也编程重复@的,但我无法插入空格。这里是我的@的程序: -

#include <iostream> 

using namespace std; 

int main() { 
    int i,j,k; 
    for (i = 7; i > 0; i = i - 2) { 

     for (j = 1; j <= i; ++j) { 

      cout << "@" << " "; 
     } 
     cout << endl; 
    } 
    return 0; 
} 
+2

您刚刚从'计算i'你多少空间需要,并与另一个循环将它们插入你开始打印前的' @'人物。您似乎已经为此声明了'k'(在您的代码中当前未使用)。 –

回答

1

您可以将一个字符串变量与一无所有开始,并在第一个周期写入(第二前):(如一个字符串变量g)

cout << g; 

而第二个周期之后,但在第一

g+=" "; 

而且你会得到你的三角形。 :)

下面的代码:

#include <iostream> 

using namespace std; 

int main() 
{ 
    string g=""; 
    for(int i=7; i>0; i-=2) 
    { 
     cout << g; 
     for(int j=1; j<=i; j++) 
     { 
      cout << "@"; 
     } 
     cout << endl; 
     g+=" "; 
    } 
    cout << "Press a button to exit..." << endl; 
    cin.get(); 
    return 0; 
} 

希望你能够理解我的英语水平。 :)

+0

不错,简单它使用非常基本的东西,它比其他答案更容易理解谢谢 –

+0

非常感谢! –

1

我的做法

#include <iostream> 
static const int FIRST_ROW = 15; 

int main() 
{ 
    for (int i = FIRST_ROW; i > 0; i -= 2) 
    { 
     for (int j = 0; j < (FIRST_ROW - i)/2; ++j) 
      std::cout << " "; 
     for (int j = 0; j < i; ++j) 
      std::cout << "@"; 
     std::cout << std::endl; 
    } 
} 
+0

它的工作原理,但你会解释代码中发生了什么?和您使用的算法@Zereges –

+1

@Adityaultra您可能想要使用调试器逐行执行此代码,以了解它是如何工作的。 –

+0

我正在使用gcc编译哪个调试器,并运行linux @πάνταῥεῖ –

1

只是一点点不同的方法的一个例子:

#include <iostream> 
#include <string> 

using namespace std; 

int main() { 
    string spaces = string(); 
    string chars = string(7, '@'); 
    while (chars.size() > 0) { 
     cout << spaces << chars << endl; 
     spaces += ' '; 
     chars.erase(max(chars.size(), 2u) - 2); 
    } 
    return 0; 
}