poj 3768 반복(그래픽 그리기)

1285 단어
제목:도면 반복 인쇄
사고방식: 위치에 따라 차례로 그려진다.주의: 전체 줄의 읽기와 출력이 필요합니다.getchar,putchar을 사용하면 시간이 초과됩니다.
입력:
4  OO  O  O O  O  OO  2 0
출력:
     OO  OO          O  OO  O         O  OO  O          OO  OO       OO          OO  O  O        O  O O  O        O  O  OO          OO   OO          OO  O  O        O  O O  O        O  O  OO          OO       OO  OO          O  OO  O         O  OO  O          OO  OO    
#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 3002
char s[N][N],t[6][6];
int n,m,scale;
void print(int x,int y,int lev){
	int i,j;
	if(lev == 1){
		for(i = 0;i<n;i++)
			for(j = 0;j<n;j++)
				if(t[i][j]!=' ')
					s[x+i][y+j] = t[i][j];
	}
	else{
		for(i = 0;i<n;i++)
			for(j = 0;j<n;j++)
				if(t[i][j]!=' ')
					print((int)(x+i*pow(n,(lev-1))),(int)(y+j*pow(n,(lev-1))),lev-1);
	}
}
int main(){
	freopen("a.txt","r",stdin);
	while(scanf("%d",&n) && n){
		int i;
		memset(s,' ',sizeof(s));
		getchar();// 
		for(i = 0;i<n;i++)
			gets(t[i]);
		scanf("%d",&m);
		scale = (int)pow(n,m);
		print(0,0,m);
		for(i = 0;i<scale;i++){
			s[i][scale] = '\0';// !!
			puts(s[i]);
		}
	}
	return 0;
}

좋은 웹페이지 즐겨찾기