2016-03-12 79 views
-3

我試圖做一個沙漏,但我不能得到沙漏權的代碼。我究竟做錯了什麼?這是原始代碼的較短版本。你怎麼做一個沙漏模式?

#include <iostream> 

using std::cin; using std::cout; using std::endl; 

int main() 
{ 
    int number; 
    cin >> number; 

//Hourglass 

    for (i = number; i > 0; i--) 
    { 
     cout << endl; 
     for (int j = number; i < j; j--) 
     { 
      cout << " "; 
     } 
     for (int j = 0; i > j; j++) 
     { 
      cout << "*"; 
     } 
     for (int j = 0; i > j; j++) 
     { 
      cout << "*"; 
     } 
    } 
    for (int i = 0; i < number; i++) 
    { 
     for (int j = 0; j < (number - (i + 1)); j++) 
     { 
      cout << " "; 
     } 
     for (int j = 0; j < (2 * i + 1); j++) 
     { 
      cout << "*"; 
     } 
     for (int j = 0; j < (number - (i + 1)); j++) 
     { 
      cout << " "; 
     } 
     cout << endl; 
    } 
} 
+3

當然,你需要沙子和玻璃製作的沙漏 - 還是我誤解了問題 –

+0

的描述-_-好吧,我不得不承認,這是一個有條件的笑話。 – Unknown6221

+0

我想要做的是用星號標出一小時玻璃杯。 – Unknown6221

回答

0

該問題出現在您的第一個for-loop中。你需要做的是移動

cout << endl; 

到循環的底部,以便它在進入第二個循環之前創建一個新行。

for (int i = number; i > 0; i--){ 
     for (int j = number; i < j; j--) 
     { 
      cout << " "; 
     } 
     for (int j = 0; i > j; j++) 
     { 
      cout << "*"; 
     } 
     for (int j = 0; i > j; j++) 
     { 
      cout << "*"; 
     } 
     cout << endl; 
    } 

    for (int i = 0; i < number; i++) 
    { 
     for (int j = 0; j < (number - (i+1)); j++) 
     { 
      cout << " "; 
     } 
     for (int j = 0; j <= (2 * i) + 1; j++) 
     { 
      cout << "*"; 
     } 
     cout << endl; 
    } 

這應該給你,像這樣

********** 
******** 
    ****** 
    **** 
    ** 
    **  
    **** 
    ****** 
******** 
********** 
+0

另外,在你的下半場的時間杯,第三個for循環是不必要的。它會在沙漏的右側增加空間,您可以將其留空,並獲得相同的結果。這樣可以減少你的程序的效率! – mikefaheysd

0

下面的代碼沙漏將打印屏幕上的沙漏(*)的模式。變量大小是要打印的沙漏的高度。使用g ++編譯器編譯代碼。

#include <iostream> 

int main() { 

    int row, col; 
    int size; 
    int diagA, diagB; 

    std::cout << "Enter height of the hourglass "; 
    std::cin >> size; 

    for (row=0; row<size; row++) { 
    for (col=0; col<size; col++) { 

     diagA = row; 
     diagB = size-row-1; 

     if (diagA <= diagB){ 
     if (col >= diagA && col <= diagB) 
      std::cout << "*"; 
     else 
      std::cout << " "; 
     } 
     else { 
     if ( col >= diagB && col <= diagA ) 
      std::cout << "*"; 
     else 
      std::cout << " "; 
     } 
    } 
    std::cout << std::endl; 
    } 

    std::cout << std::endl; 

    return 0; 
}