[青]印刷ブリッジ断面図カップ(C ++の詳細)

[タイトル]

制限時間:1.0秒メモリ制限:256.0メガバイト
十字ロゴ(ないICRC AH)の設計のための暁機構は、次の通り:

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

他方の側も、マークの文字の形のコンピュータのDOSウィンドウで出力する必要があり、任意の数の層を制御することができます。

エントリー

3

輸出

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

 アイデア解析

考える:観察し、それまでにレベルオーバーレイ方法。

階層被覆方法:一つの層が最外層から(底部層)、重畳されているが開始さ、相互作用を達成するために、によって二列の列 対向 マトリクスオーバーレイ被覆が 完成外側クロス次クロス、必要がなかった場合に、行われます注インデント。

このように、ほぼ完了した後。ブルー$「「赤い部分が表す」」を表し

詳細な手順

  • まず、カバーの底面すべての「」(下記参照)

  • 次の層を追加し、上記赤、青、カバーボトムの行列を追加することです。

クロスを形成する層を追加していきます。

そして、充填を完了しそう。ブルー「は埋めるために2つの回転、$」「赤い部分を表しています」。

同時に、トリックがあります!

使用対称性

マトリックスは、とみなすことができるBは行列転置しました。このように、座標に沿って主対角線対称。

コード

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

概要

本当に学び、そしてこの方法は、最初の時間Iのこぎりでなく、蓄積がたくさんあります。

公開された62元の記事 ウォン称賛34 ビュー20000 +

おすすめ

転載: blog.csdn.net/weixin_41960890/article/details/105154140