FIG transversales papeles de impresión anteriores (analógico)

Preguntas sucesivas imprimir Mapa Cruz

资源限制
时间限制:1.0s   内存限制:256.0MB

$ Diario Inglés:

Quiero recordar a la gente la única cosa en el planeta es la siguiente: Nosotros
dependemos de la madre tierra para sobrevivir.
Lo único que quiero es despertar a todos los seres humanos en el planeta que estamos viviendo en la Madre Tierra.

Descripción del problema

Xiaoming un diseño en forma de cruz del logotipo (no ah CICR) para un mecanismo, como sigue:

..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

Por otro lado también debe ser de salida en la ventana DOS informáticos en forma del carácter de la marca, y puede controlar cualquier número de capas.

Formato de entrada

Un número entero positivo n (n <30) representa el número de capas necesarias para la impresión de gráficos.
Formato de salida
correspondiente al número de capas que rodean el marcador.

entrada de la muestra 1

1

Resultado de muestra 1

..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..

entrada de la muestra 2

3

Ejemplo de salida 2

..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

Tip
Por favor, observe cuidadosamente la muestra, con especial atención al número y la ubicación de la salida del periodo.

ideas:

Este problema una media de bits (he leído desde hace mucho tiempo, se ha comenzado llevado a pensar demasiado complicado no sé cómo perder mucho tiempo !!! !! manos, afortunadamente, no se dio por vencido !!!). Por último, un yo estaba arriba! ! ! Haha ~ (en voz baja feliz por un rato)

analógica bruta (o, de hecho, un poco de cerebro ~):
transversal intermedia primero se inicializan, a continuación, coger dos puntos de partida, de cada anillo se divide en cuatro partes,
cada parte, y la dirección de estirado del número de pasos necesarios para registrar cada sección.
Ver código específico ~

código:

#include <iostream>
#include <vector>
using namespace std;
char mp[150][150];
//dir: up,down,left,right:0,1,2,3
int step_x[] = {-1,1,0,0};
int step_y[] = {0,0,-1,1};
struct Point
{
    int x;
    int y;
    Point(int xx,int yy)
    {
        x = xx;
        y = yy;
    }
};
vector<Point>vec;

//设置每一部分的方向+步数
void initVec(int *dc_d,int *dc_c)
{
    if(vec.size())vec.clear();
    for(int i = 0; i < 4; i++)
    {
        vec.push_back(Point(dc_d[i],dc_c[i]));
    }
}
//绘制每一个部分
void work(int sx,int sy)
{
    for(int i = 0; i < 4; i++)
    {
        int dir = vec[i].x;
        int cnt = vec[i].y;
        int xx = sx + step_x[dir];
        int yy = sy + step_y[dir];
        mp[xx][yy] = '$';
        for(int j = 1; j < cnt; j++)
        {
            xx += step_x[dir];
            yy += step_y[dir];
            mp[xx][yy] = '$';
        }
        sx = xx;
        sy = yy;
    }
}
int main()
{
    int n;
    cin>>n;
    //图像大小
    int m = 5 + 4 * n;
    //图像初始化
    for(int i = 0; i < m; i++)
    {
        for(int j = 0; j < m; j++)
        {
            mp[i][j] = '.';
        }
    }
    Point center(2*n+2,2*n+2);
    //中间十字
    mp[center.x][center.y] = '$';
    for(int i = 0; i < 4; i++)
    {
        int x1 = center.x + step_x[i];
        int y1 = center.y + step_y[i];
        mp[x1][y1] = '$';
        x1 += step_x[i];
        y1 += step_y[i];
        mp[x1][y1] = '$';
    }
    int y0 = center.y - 2,z0 = center.y + 2;
    //方向
    int dc_d0[] = {0,3,0,3};
    int dc_d1[] = {0,2,0,2};
    int dc_d2[] = {1,3,1,3};
    int dc_d3[] = {1,2,1,2};
    int x = 2 * n + 2;
    int y = y0,z = z0;
    //每圈分成4个部分
    for(int i = 1; i <= n; i++)
    {
        //步数
        int dc_c[] = {2*i,2,2,2*i};
        //两个起点的列
        y -= 2;
        z +=  2;
        mp[x][y] = '$';
        mp[x][z] = '$';
        //左上
        initVec(dc_d0,dc_c);
        work(x,y);
        //右上
        initVec(dc_d1,dc_c);
        work(x,z);
        //左下
        initVec(dc_d2,dc_c);
        work(x,y);
        //右下
        initVec(dc_d3,dc_c);
        work(x,z);
    }
    for(int i = 0; i < m; i++)
    {
        for(int j = 0; j < m; j++)
        {
            cout<<mp[i][j];
        }
        cout<<endl;
    }
    return 0;
}

Publicados 301 artículos originales · ganado elogios 38 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/tb_youth/article/details/104826918
Recomendado
Clasificación