【问题标题】:More complex shapes using nested for loops in C++在 C++ 中使用嵌套 for 循环的更复杂的形状
【发布时间】:2015-01-18 20:24:52
【问题描述】:

我见过一些他们做 X 或三角形或菱形等简单示例的地方。我想知道如何制作这样的复杂形状:

#                 #
 ##             ##
  ###         ###
   ####     ####
    ###########
    ###########
   ####     ####
  ###         ###
 ##             ##
#                 #

我对编程非常陌生,不知道代码本身的基本功能。

#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
  int spaces = 4;
  int hashes = 1;
  for(int row=0;row<10;row++)
  {
      for(int spaces=0;spaces<4;spaces++)
      {
          cout<<" ";
      }
      for(int hashes=0;hashes<1;hashes++)
      {
          cout<<"#";
      }
      cout<<endl;

      if(row<5&&row>6)
      {
          spaces--;
          hashes+=2;
      }
      else
      {
          spaces++;
          hashes-=2;
      }

  } 
  return 0;
}

【问题讨论】:

  • 创建这样的形状有两个方面——提出一个逻辑并用编程语言对该逻辑进行编码。您在哪个方面遇到了问题?
  • 像这样:ideone.com/ePsJDZ。这是对this question 的评论。
  • @juanchopanza,这是作弊:)
  • @juanchopanza 主要是解决问题的策略,我没有语法或任何问题,只是如何以逻辑方式处理问题的问题

标签: c++ loops for-loop nested-loops shapes


【解决方案1】:

一种简单的方法是使用“光线追踪”方法;即

for (int y=0; y<rows; y++) {
    for (int x=0; x<cols; x++) {
        if (func(x, y)) {
            std::cout << "#";
        } else {
            std::cout << " ";
        }
    }
    std::cout << "\n";
}

例如将rows = cols = 20func 定义为

bool func(int x, int y) {
    return (x-10)*(x-10) + (y-10)*(y-10) < 8*8;
}

你会得到一个圆圈

【讨论】:

【解决方案2】:

许多像你这样绘制形状的作业都是基于水平和垂直方向的对称性。例如,在水平方向上,从左到中的字符在中心点之后镜像。

绘制形状的老式方法是将它们存储在一个二维数组中,然后打印出该数组:

unsigned char letter_E[7][5] =
{
  {'*', '*', '*', '*', '*'},
  {'*', ' ', ' ', ' ', ' '},
  {'*', ' ', ' ', ' ', ' '},
  {'*', '*', '*', '*', '*'},
  {'*', ' ', ' ', ' ', ' '},
  {'*', ' ', ' ', ' ', ' '},
  {'*', '*', '*', '*', '*'},
};

for (unsigned int row = 0; row < 7; ++row)
{
  for (unsigned int column = 0; column < 5; ++column)
  {
    std::cout << letter_E[row][column];
  }
  std::cout << '\n';
}

另外,在互联网上搜索“ASCII art”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2019-03-17
    • 2015-12-14
    相关资源
    最近更新 更多