***牛客网,getline莫名其妙就把字符串末尾的空格吞掉了
迭代法做,逐次刷新map
慢归慢,胜在思路简单

#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;


void FillMapZoneWith(char c,char* map,int rowStart,int rowEnd,int colStart,int colEnd){
	for(int i=rowStart;i<=rowEnd;i++){
		for(int j=colStart;j<=colEnd;j++){
			map[i*3000+j] = c;
		}
	}
}
void FillMapZoneWithBlank(char* map,int rowStart,int rowEnd,int colStart,int colEnd){
	FillMapZoneWith(' ',map,rowStart,rowEnd,colStart,colEnd);
}
void FillMapZoneWithTemplate(char* map,char* Template,int templateSize,int rowStart,int colStart){
	for(int i=0;i<templateSize;i++){
		for(int j=0;j<templateSize;j++){
			map[(rowStart+i)*3000+colStart+j] = Template[i*5+j];
		}
		
	}
}
void FillMap(char* &map,int mapSize,char* Template,int templateSize){
	char* newMap = (char*)malloc(sizeof(char)*3000*3000);
	FillMapZoneWithTemplate(newMap,map,mapSize,0,0);
	
	//扫描map
	for(int i=0;i<mapSize;i++){
		for(int j=0;j<mapSize;j++){
			int rowStart = i*templateSize;
			int rowEnd = (i+1)*templateSize-1;
			int colStart = j*templateSize;
			int colEnd = (j+1)*templateSize-1;
			
			if(map[i*3000+j]==' '){
				FillMapZoneWithBlank(newMap,rowStart,rowEnd,colStart,colEnd);
			} else {
				FillMapZoneWithTemplate(newMap,Template,templateSize,rowStart,colStart);
			}
		}
	} 
	map = newMap;
}
int main(){//习题2.4 北京大学 Repeater 
    int templateSize;
    int scale;
    char* Template = (char*)malloc(sizeof(char)*25); 
    string line;
	while(cin>>templateSize){
    	if(templateSize==0) break;
        cin.ignore();//吃掉\n
    	
    	//生成模版阵列 
    	for(int i=0;i<templateSize;i++){
	    	getline(cin,line);
	    	for(int j=0;j<templateSize;j++){
                if(line.size()<j+1){
                    Template[i*5+j] = ' ';//***牛客网,getline能把字符串末尾的空格吞掉
                } else {
	    		    Template[i*5+j] = line[j];
                }
			}
		}
		//根据模版阵列生成字符阵列
		cin>>scale;
		int mapSize = pow(templateSize,scale);
		
		char* map = (char*)malloc(sizeof(char)*3000*3000);
        FillMapZoneWithTemplate(map,Template,templateSize,0,0);
		for(int i=1;i<scale;i++)
			FillMap(map,mapSize,Template,templateSize);
	
		//打印字符阵列 
		for(int i=0;i<mapSize;i++){
			for(int j=0;j<mapSize;j++){
                cout<<map[i*3000+j];
			}
			cout<<endl;
		}
        
	}
    return 0;
}