2016-03-12 55 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; 
}