Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198251
  • 博文数量: 67
  • 博客积分: 2970
  • 博客等级: 少校
  • 技术积分: 685
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-23 11:36
文章分类

全部博文(67)

文章存档

2012年(2)

2011年(19)

2010年(46)

我的朋友

分类: C/C++

2010-07-24 14:31:53

#include<stdio.h>
#include<string.h>
#include<math.h>

char mat[3001][3001],base[6][6];
int n;

void print(int length)
{
    for(int i=0;i<length;i++)    
    {
        mat[i][length]='\0';
        printf("%s\n",mat[i]);
    }
}

void solve(int x,int y,int depth)
{
    if(depth==1)    
    {
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
            {
                mat[x+i][y+j]=base[i][j];
            }
    }
    else
    {
        int offset=(int)pow((double)n,(double)(depth-1));

        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
            {
                if(base[i][j]!=' ')
                {
                    solve(x+i*offset,y+j*offset,depth-1);
                }
            }
    }
}

int main()
{
    while(scanf("%d",&n),n)
    {
        getchar();       //基本图形中存在空格,不能用scanf输入
        for(int i=0;i<n;i++)
        {
            gets(base[i]);
        }
        
        int m;
        scanf("%d",&m);
        memset(mat,' ',sizeof(mat));

        solve(0,0,m);
        print((int)pow((double)n,(double)m));
    }
    return 0;
}

 

注意:

该题中对图形的尾随空格没有限制,若类似的题目提交出现PresentationError则需要在每行末尾处设置'\0',另外,画图的关键是找准坐标。

阅读(1104) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~