叠筐问题HDU 2074

    xiaoxiao2026-09-14  2

    Description

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

    Input

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

    Output

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

    这个题目的本身不难,但是提交到OJ上  经常会WA PE,原因就是在题目理解的意思上没有弄懂;

    “最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。”,题目的这一句的关键意思就在于以下两点:

     1. 四个角都是空格  2.每个例子是在下一个例子出现时才有空格。 弄懂这个意思这个题目也就不难了    在第一次输入输出后   往后的每一次都在前面加一个换行符就解决了。 #include<stdio.h> #include <string.h> char d[85][85]; main () { int a,i,j,n=1; char b,c; while (scanf("%d %c %c",&a,&b,&c)!=EOF) { if (n!=1) printf("\n");//关键就这一句处理 ,格式对了其他的就都很好解决。 memset(d,0,sizeof(d)); if (a==1) printf("%c\n",b); else { if (((a+1)/2)%2!=0) { for(i=0;i<a;i++) for(j=0;j<a;j++) d[i][j]=b; for(i=0;i<a;i++) if(i%2!=0) for(j=i;j<a-i&&i;j++) { d[i][j]=c; d[j][i]=c; d[a-i-1][j]=c; d[j][a-i-1]=c; } } else { for(i=0;i<a;i++) for(j=0;j<a;j++) d[i][j]=c; for(i=0;i<a;i++) if(i%2!=0) for(j=i;j<a-i&&i;j++) { d[i][j]=b; d[j][i]=b; d[a-i-1][j]=b; d[j][a-i-1]=b; } } for(i=0;i<a;i++) { for(j=0;j<a;j++) if((i==0&&j==0)||(i==0&&j==a-1)||(i==a-1&&j==0)||(i==a-1&&j==a-1)) printf(" "); else printf("%c",d[i][j]); printf("\n"); } } n++; } }

    转载请注明原文地址: https://ju.6miu.com/read-1312044.html
    最新回复(0)