题解 | Repeater

Repeater

https://www.nowcoder.com/practice/97fd3a67eff4455ea3f4d179d6467de9

分层求每个元素映射到模板的位置

#include <iostream>
#include <cstring>

using namespace std;

char mod[5][5], ch;
int n, q, sz;

// a的k次方(cmath的pow是浮点运算)
int pow(int a, int k) {
    int res = 1;
    while (k--) res *= a;
    return res;
}

int main() {
    while (cin >> n, n != 0) {

        cin.ignore(); // 丢掉 '\n'
        for (int i = 0; i < n; i++) {
            cin.getline(mod[i], 6);

            // 获取非空字符
            for (int j = 0; j < n; j++)  
                if (mod[i][j] != ' ') 
                    ch = mod[i][j];
        }

        cin >> q;
        sz = pow(n, q);

        // 每个元素映射到模板的位置
        for (int i = 0; i < sz; i++) {
            for (int j = 0; j < sz; j++) {
                
                bool ok = true;
                int x = i, y = j;

                // 层数由大到小分析
                for (int k = q - 1; k >= 0; k--) {
                    
                    // 本层块的大小
                    int lsz = pow(n, k);

                    // 计算 (x, y) 映射到模板的哪一块
                    if (mod[x / lsz][y / lsz] == ' ') {
                        // 映射到空块可直接退出
                        ok = false;
                        break;
                    }

                    // 计算下一层的坐标
                    x %= lsz;
                    y %= lsz;
                }

                cout << (ok ? ch : ' ');
            }
            cout << endl;
        }
    }
    return 0;
}

全部评论

相关推荐

喵_coding:年底缺人是短视频营造出来的 而且一般说的也很宽泛 不是特指后端
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务