1649 - 叠筐
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
Input
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
Output
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
Examples
Input
5 ^ ! 7 ( ) 0
Output
^^^ ^!!!^ ^!^!^ ^!!!^ ^^^ ))))) )((((() )()))() )()()() )()))() )((((() )))))
Solution C
#include <stdio.h> int main() { int n,i,j,t,u=0; char a,b,r; while(scanf("%d %c %c",&n,&a,&b)!=EOF) { if(u!=0) printf("\n"); if(n==1) printf("%c\n",a); else { if((n+1)/2%2==1) { r=a; a=b; b=r; } printf(" "); for(i=0;i<n-2;i++) printf("%c",b); printf(" \n"); for(i=2;i<n;i++) { if(i<=(n+1)/2) t=i; else t=n+1-i; for(j=1;j<=n;j++) { if(j<=t||j>n-t) { if(j%2==1) printf("%c",b); else printf("%c",a); } else { if(i%2==0) printf("%c",a); else printf("%c",b); } } printf("\n"); } printf(" "); for(i=0;i<n-2;i++) printf("%c",b); printf(" \n"); u++; } } return(0); }
Solution C++
#include <stdio.h> int n; int run() { char a,b; int i,j,k,l,t,m; scanf(" %c %c",&a,&b); m=n/2+1; for(i=1;i<=n;i++) { k=m-i; if(k<0) k=-k; for(j=1;j<=n;j++) { l=m-j; if(l<0) l=-l; if((k==m-1)&&(l==m-1)&&(n>1)) printf(" "); else { t=l; if(t<k) t=k; if(t%2==0) printf("%c",a); else printf("%c",b); } } printf("\n"); } printf("\n"); } int main() { scanf("%d",&n); while(n!=0) { run(); n=0; scanf("%d",&n); } return 0; }