2015-07-30 2 views
-1

У меня есть задача рисовать квадрат внутри квадрата внутри квадрата и т. Д. Это выглядит так. Для числа 10 занесены, мы должны сделать:Мне нужно рисовать квадрат внутри квадрата в C++

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

мне удалось закодировать это:

int n; 
std::cin>>n; 


for(int i=0;i<n;i++) 
    std::cout<<"*"; 

std::cout<<std::endl <<"*"; 

for(int i=0;i<n-2;i++) 
    std::cout<<" "; 

std::cout<<"*"<<std::endl <<"*"; 

for(int i=0;i<n-2;i++) 
    std::cout<<" "; 

std::cout<<"*"<<std::endl; 

for(int i=0;i<n;i++) 
    std::cout<<"*"; 

std::cout<<std::endl; 

return 0; 
} 

, и я должен использовать некоторую связь между повторением пустых пространств и «*», и я знаю, что мне нужно использовать математическое выражение и алгебру bool> Мне просто нужен намек, чтобы не решить эту проблему. Должен ли я попытаться разбить эту фигуру на 4 или 2 части (самая большая проблема - это наименьшее квадратное или пустое пространство, которое повторяется для четных и нечетных чисел, но для того, чтобы даже иногда это было бальн-пространство, иногда его маленький квадрат. Надеюсь, английский, и надеюсь, что какой-то намек или помощь придет ...: D

ответ

0

Один из способов сделать это заключается в следующем:

#include <iostream> 
#include <algorithm> // for std::min() 

int dist (int dim, int r, int c) 
{ 
    return std::min(std::min(r, dim-1-r), std::min(c, dim-1-c)); 
} 

char char_at_point (int dim, int r, int c) 
{ 
    if ((dist(dim, r, c) % 2) == 0) return '*'; 
    else return ' '; 
} 

int main() { 
    int dim = 0; 
    std::cin >> dim; 

    for (int r = 0; r < dim; ++r) 
    { 
     for (int c = 0; c < dim; ++c) 
      std::cout << char_at_point(dim, r, c); 
     std::cout << std::endl; 
    } 
    return 0; 
} 

в принципе, самый простой способ сделать что-то вроде этого есть функция (в математическом смысле), которая говорит вам, нужно ли вам заполнять точку с определенной координатой или нет. Если бы у вас была эта функция, вы бы просто переместили координаты всего квадрата и использовали эту функцию, чтобы решить, следует ли печатать там есть звездочка или sp туз.

Эта функция в вашем случае довольно проста для сборки; вы можете определить расстояние каждой точки от периметра самого внешнего квадрата и заполнить эту координату тогда и только тогда, когда расстояние делится на два.

+0

спасибо mate ... (y) – Ahmo

+0

@Bosancheros, если бы этот ответ помог вам, я думаю, было бы уместно принять его (или, по крайней мере, перенести его или оба). В противном случае, я думаю, вы должны уточнить, почему вы не хотите этого делать (как можно улучшить этот ответ). – FreeNickname

Смежные вопросы