2015-07-05 220 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; 
}