ConstStar
发布于 2022-09-04 / 114 阅读 / 0 评论 / 0 点赞

蓝桥杯2013年C组:打印十字图

问题描述

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

输入:一个正整数 n (n< 30) 表示要求打印图形的层数。

解题方案

代码

#include <iostream>
#include <string.h>

using namespace std;

int main() {

    //由图可知 上下顶左右边为n*4+1

    //30*4+1 +4
    char arr[125][125];
    int n;

    scanf("%d", &n);
    memset(arr, '.', sizeof(arr));

    for (int i = 0; i < n; ++i) {

        int top = i * 2;
        for (int i = top; i < n * 4 + 5 - top; i++) {

            //顶层 && 底层 && 侧边
            if (i >= 2 + top && i < n * 4 + 3 - top) {
                arr[top][i] = '$';                    //底层
                arr[n * 4 + 4 - top][i] = '$';        //底层

                arr[i][top] = '$';
                arr[i][n * 4 + 4 - top] = '$';
            }

            //第二层 && 倒数第二层
            if (i == 2 + top || i == n * 4 + 2 - top) {
                arr[top + 1][i] = '$';                //第二层
                arr[1 + n * 4 + 2 - top][i] = '$';    //倒数第二层
            }

            //第三层 && 倒数第三层
            if (i <= 2 + top || i >= n * 4 + 2 - top) {
                arr[top + 2][i] = '$';            //第三层
                arr[2 + n * 4 - top][i] = '$';    //倒数第三层
            }
        }
    }

    //十字架
    if (n % 2) {
        int n2 = (n * 4 + 5) / 2;
        arr[n2][n2] = '$';
        arr[n2][n2 - 1] = '$';
        arr[n2][n2 - 2] = '$';
        arr[n2][n2 + 1] = '$';
        arr[n2][n2 + 2] = '$';
        arr[n2][n2] = '$';
        arr[n2 - 1][n2] = '$';
        arr[n2 - 2][n2] = '$';
        arr[n2 + 1][n2] = '$';
        arr[n2 + 2][n2] = '$';
    }


    //打印输出
    for (int i = 0; i < n * 4 + 5; ++i) {
        for (int j = 0; j < n * 4 + 5; ++j) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

评论