现在的位置: 首页 > 综合 > 正文

hdu 2074 叠筐

2018年05月02日 ⁄ 综合 ⁄ 共 1173字 ⁄ 字号 评论关闭

叠筐

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12377    Accepted Submission(s): 3196

Problem Description
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
 

Input
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
 

Output
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
 

Sample Input
11 B A 5 @ W
 

Sample Output
AAAAAAAAA ABBBBBBBBBA ABAAAAAAABA ABABBBBBABA ABABAAABABA ABABABABABA ABABAAABABA ABABBBBBABA ABAAAAAAABA ABBBBBBBBBA AAAAAAAAA @@@ @WWW@ @W@W@ @WWW@ @@@
 

/*题解: 
此题格式控制极为严格。
注意: 
    1.四角均有空格,要输出空格字符' '。
    2.除第一次输入外,以后每一次输入后均为先换行后输出。
    3.箩筐最中心的字符为第一个字符。 
*/

输出格式形如:
#include<cstdio>
#include<cstring>
int main()
{
    int n,i,j,t1,t2,ok=0;
    char a,b,map[88][88];
    while(scanf("%d %c %c",&n,&a,&b)!=EOF)
    {
        if(ok)
        {
            printf("\n");
        }
        ok=1;
        memset(map,0,sizeof(map));
        if(n==1)    {printf("%c\n",a);continue;}
        t1=t2=(n+1)/2;
        while(1)
        {
            for(i=t1; i<=t2; i++)
            {
                for(j=t1; j<=t2; j++)
                {
                    if(map[i][j]==0)
                        map[i][j]=a;
                }
            }
            t1--;
            t2++;
            if(t1==0) break;
            for(i=t1; i<=t2; i++)
            {
                for(j=t1; j<=t2; j++)
                {
                    if(map[i][j]==0)
                        map[i][j]=b;
                }
            }
            t1--;
            t2++;
            if(t1==0) break;
        }
        map[1][1]=map[n][1]=' ';
        map[1][n]=map[n][n]=' ';
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=n; j++)
            {
                printf("%c",map[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

抱歉!评论已关闭.