/* 习题2-4 Repeater(北京大学复试上机题) 题目描述: 输入: 输出: 分析:利用数组进行排版 提交网址:http://t.cn/E9jcaVb */ #include <iostream> #include <cstdio> using namespace std; #define MAXSIZE 3000 #define MAXN 5 char M[MAXSIZE][MAXSIZE]; // 最终形态 char buf[MAXSIZE][MAXSIZE]; // 中间形态 char temp[MAXN][MAXN]; // 最初模板 int copyTemp(int x, int y, int scaleSize, bool isBlank) { // 从M[x][y]开始复制模式 for (int i = 0; i < scaleSize; ++i) { for (int j = 0; j < scaleSize; ++j) { if (isBlank) M[i + x][j + y] = ' '; else M[i + x][j + y] = buf[i][j]; } } return 0; } int repeat(int scaleSize, int tempSize) { // 暂存 for (int i = 0; i < scaleSize; ++i) { for (int j = 0; j < scaleSize; ++j) { buf[i][j] = M[i][j]; } } // 放大 for (int i = 0; i < tempSize; ++i) { for (int j = 0; j < tempSize; ++j) { copyTemp(i * scaleSize, j * scaleSize, scaleSize, temp[i][j] == ' '); } } return 0; } int main() { int N, Q; while (scanf("%d", &N) != EOF) { getchar(); if (N == 0) break; for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { scanf("%c", &temp[i][j]); M[i][j] = temp[i][j]; } getchar(); } scanf("%d", &Q); getchar(); // 以上是输入部分 // 按模式复制 int scaleSize = N; for (int scale = 1; scale < Q; ++scale) { repeat(scaleSize, N); scaleSize *= N; } // 输出 for (int i = 0; i < scaleSize; ++i) { for (int j = 0; j < scaleSize; ++j) cout << M[i][j]; cout << endl; } } return 0; }