杭电-叠筐问题

叠筐

⭐️类型:模拟

⭐️难度:难

📖题目:

📖题目链接:叠筐

⭐️思路:

1、一圈一圈画,总共有n/2圈;

2、找出中心(n/2,n/2),从中心开始画,找出每一圈四条边的 起点终点 ,与 层数n 有关(四个循环)。

📚题解:

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

using namespace std;

int main() {
    int n ;
    char in , out;
    char arr[100][100] = { 0 };

    // 11 B A 
    // %d %lf .. 忽略空白
    // %c 不忽略空白
    // 空格%c 忽略空白
    
    while (scanf("%d %c %c", &n, &in, &out) != EOF) {
        memset(arr, 0, 10000);
        char current = in;
        for (int layer = 0;layer <= n / 2;layer++) { // 当前层级,0代表中心
            // 当前所画的层的四个角的坐标
            // n/2 - layer,n/2 - layer 左上
            // n/2 - layer,n/2 + layer 右上
            // n/2 + layer,n/2 + layer 右下
            // n/2 + layer,n/2 - layer 左下

            for (int x = n / 2 - layer, y = n / 2 - layer;y <= n / 2 + layer; y++) { // 画上边
                arr[x][y] = current;
            }
            for (int x = n / 2 - layer, y = n / 2 + layer;x <= n / 2 + layer; x++) { // 画右边
                arr[x][y] = current;
            } 
            for (int x = n / 2 + layer, y = n / 2 - layer;y <= n / 2 + layer; y++) { // 画下边
                arr[x][y] = current;
            }
            for (int x = n / 2 - layer, y = n / 2 - layer;x <= n / 2 + layer; x++) { // 画左边
                arr[x][y] = current;
            }
            if (current == in) { // 每画一层换个字符
                current = out;
            }
            else {
                current = in;
            }
        }
        // 除去四个角
        arr[0][0] = ' ';
        arr[0][n - 1] = ' ';
        arr[n - 1][0] = ' ';
        arr[n - 1][n - 1] = ' ';

        for (int i = 0;i < n ;i++) {
            printf("%s\n", arr[i]); // 输出一行应用%s
        }
    }
   
    return 0;
}
相关推荐
Tisfy5 天前
LeetCode 2833.距离原点最远的点:计数
算法·leetcode·字符串·题解·模拟·计数
浅念-5 天前
LeetCode 模拟算法:用「还原过程」搞定编程题的入门钥匙
开发语言·c++·学习·算法·leetcode·职场和发展·模拟
qeen8711 天前
【算法笔记】模拟与高精度加减乘除
c++·笔记·算法·高精度·模拟
Q741_14716 天前
每日一题 力扣 1848. 到目标元素的最小距离 模拟 C++题解
c++·算法·leetcode·模拟
Tisfy18 天前
LeetCode 3740.三个相等元素之间的最小距离 I:今日先暴力,“明日“再哈希
算法·leetcode·哈希算法·题解·模拟·遍历·暴力
Q741_14719 天前
每日一题 3740. 三个相等元素之间的最小距离 I 3741. 三个相等元素之间的最小距离 II 模拟 哈希表 C++ 题解
c++·算法·leetcode·模拟·数组·哈希表
Q741_14720 天前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
Q741_14721 天前
每日一题 力扣 3653. 区间乘法查询后的异或 I 模拟 数学 位运算 C++ 题解
c++·数学·算法·leetcode·力扣·模拟
Q741_1471 个月前
每日一题 力扣 2751.机器人碰撞 映射 模拟 栈 C++ 题解
算法·leetcode·模拟··映射
A923A1 个月前
【洛谷刷题 | 第七天】
算法·模拟·洛谷