[Azul] puente de impresión taza cruz figura (C ++ detallada)

[Título]

Plazo: límite de memoria 1,0s: 256.0MB
mecanismo Xiaoming para un diseño de un logotipo en forma de cruz (no CICR ah), de la siguiente manera:

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

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.

entrada

3

exportación

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

 análisis de las ideas

Pensando: observar, a continuación, mediante el método de superposición nivel.

Jerarquía método abarca: una capa se superpone, desde la capa más externa (capa inferior) comienza; para lograr el efecto cruz, por dos filas columna  opuesta  cubierta matriz de superposición  está hecho, cuando una transversal exterior acabada hizo la siguiente cruz, necesidad nota guión.

Después de completar más o menos así. El azul representa '' la parte roja representa la '$'

pasos detallados

  • En primer lugar una superficie inferior de la tapa '' (véase más adelante)

  • Siguiente añadir una capa, que es añadir una matriz de color rojo, fondo cubierta azul arriba.

Continuar para añadir una capa para formar una cruz.

Y así sucesivamente hasta completar el llenado. El azul representa '' la parte roja representa la '$', dos rotación para relleno.

Al mismo tiempo, hay un truco!

Uso simetría .

Una matriz puede ser vista como una matriz B transpuesta. Por lo tanto, la coordenada a lo largo de la diagonal principal de simetría.

código

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    char map[150][150];
    cin >> n;
    
    int r = 4 * n + 5;	//矩阵长宽
    int t = n + 1;		//层的次数
    
    //填好第一层
    for(int i = 1; i <= r; i++){
        for(int j = 1; j <= r; j++){
            map[i][j] = '.';
        }
    }
    //剩下一层一层填
    for(int k = 1; k <= t; k++){
        //遍历每一层
        //以两层为一对,外层填 $ ,里层填 .
        for(int i = 1 + 2 * k; i <= r - 2 * k; i++){
            for(int j = 1 + 2 * k - 2; j <= r - (2 * k - 2); j++){
                //对称性
                map[i][j] = '$';
                map[j][i] = '$';
            }
        }
        for(int i = 1 + 2 * k + 1; i <= r - 2 * k - 1; i++){
            for(int j = 1 + 2 * k - 1; j <= r - (2 * k - 2) - 1; j++){
                //对称性
                map[i][j] = '.';
                map[j][i] = '.';
            }
        }
    }
    for(int i = 1; i <= r; i++){
        for(int j = 1; j <= r; j++){
           cout << map[i][j];
        }
        cout<<endl;
    }
    return 0;
}

resumen

Realmente aprender, y este método es la primera sierra que el tiempo, sino también una gran cantidad de acumulación.

Publicado 62 artículos originales · ganado elogios 34 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_41960890/article/details/105154140
Recomendado
Clasificación