你如何制作沙漏图案

How do do you make an Hourglass pattern?

本文关键字:沙漏 何制作      更新时间:2023-10-16

我正在尝试制作沙漏,但我无法正确获取沙漏的代码。我做错了什么?这是原始代码的较短版本。

#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;
   }
}

问题出在您的第一个 for 循环中。你需要做的是移动

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;
    }

这应该给你一个这样的沙漏

**********
 ********
  ******
   ****
    **
    **    
   ****   
  ******  
 ******** 
**********

以下代码将在屏幕上打印沙漏 ( * ) 图案。可变尺寸是要打印的沙漏的高度。使用 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;
}