未必是最快的,但或许是最简洁的。
灵感:如果我拿着一张世界地图在地球上行走,那地图上一定有一个点,就代表它本身。
注意到,我们只要找到不动点即可:
1)如果一个点在粗粒度已经落在了“空白区”,直接输出空格即可。
2)只有不断细分,直到最小尺度仍不是空白,才输出相应的符号。
#include <stdio.h>
#include <math.h>
int main() {
int n, i, j, lev;
char t, temp[7][7];
while (scanf("%d", &n)&&n!=0) {
//input
getchar();
for (i = 0; i < n; ++i) {
fgets(temp[i], sizeof(temp[i]), stdin);
// for (j = 0; j < n; ++j) {
// if(temp[i][j]=='\n'||temp[i][j]=='\0') temp[i][j]=' ';
// } 默认测试样例丢空格,实际测试样例是方的
}
scanf("%d", &lev);
getchar();
//output
int si=pow(n, lev), ti, tj, tl;
for (i = 0; i < si; ++i) {
for (j = 0; j < si; ++j) {
ti=i; tj=j; tl=lev-1;
int flag=1;
while(tl>0){
int tag=pow(n, tl--);
if(temp[ti/tag][tj/tag]==' '){
flag=0; break;
}else{
ti = ti%tag; tj = tj%tag;
}
}
printf("%c", flag ? temp[ti][tj]:' ');
}
printf("\n");
}
}
return 0;
}

京公网安备 11010502036488号