杭电-叠筐问题

叠筐

⭐️类型:模拟

⭐️难度:难

📖题目:

📖题目链接:叠筐

⭐️思路:

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;
}
相关推荐
吞下星星的少年·-·3 天前
Div.3 CF 1131A题(排序,模拟)
算法·模拟·排序
重生之小比特4 天前
【算法拾光】模拟|提莫攻击 + N 字形变换
算法·模拟
Tisfy20 天前
LeetCode 2913.子数组不同元素数目的平方和 I:第一题先常数很大的O(n^2)
算法·leetcode·题解·模拟·暴力
Logic10121 天前
C语言/数据结构字符串题解:解压缩“字符+次数“格式——多位数字处理与字符串还原
c语言·数据结构·字符串·模拟·时间复杂度·空间复杂度·算法题
jyyyx的算法博客1 个月前
机器人开箱子【贪心 + 模拟】
贪心·模拟
gjjwh2 个月前
【免费】9月和谐版XPlane12 12.4.3-r1免费下载
模拟
Logic1012 个月前
C语言/数据结构数组题解:数字列表加一(Plus One)——进位处理与数组扩展
c语言·数据结构·模拟·数组·时间复杂度·算法题·进位
Tisfy2 个月前
LeetCode 0836.矩形重叠:xy两方向分别看
数学·leetcode·题解·模拟
Tisfy2 个月前
LeetCode 3870.统计范围内的逗号:模拟 或 一步计算
数学·算法·leetcode·题解·模拟·遍历
Tisfy2 个月前
LeetCode 2058.找出临界点之间的最小和最大距离:遍历+遇到极值则更新(这种题谁空间复杂度不是O(1)啊)
linux·数据库·leetcode·链表·题解·模拟·遍历