叠筐
Time limit1000 ms
Memory limit32768 kB
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
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@
@@@
模拟题,题意很简单也易懂,这里不讲;
模拟思路:判断每个位置在第几圈
m=i;
if(j<m) m=j;
if(n-i+1<m) m=n-i+1;
if(n-j+1<m) m=n-j+1;
if(m%2==1) printf("%c",a);
else printf("%c",b);
i,j分别跟0,n做差,就可轻易得到在第几圈;
完整代码
#include<stdio.h>
int main()
{
int n,i,j,m,f=0;
char a,b,x;
while(~scanf("%d %c %c",&n,&a,&b))
{
if(f) printf("\n");
f=1;
if(n==1) printf("%c\n",a);
else
{
if((n/2+1)%2==0)
{
x=a;
a=b;
b=x;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==1&&j==1||i==1&&j==n||i==n&&j==1||i==n&&j==n) printf(" ");
else
{
m=i;
if(j<m) m=j;
if(n-i+1<m) m=n-i+1;
if(n-j+1<m) m=n-j+1;
if(m%2==1) printf("%c",a);
else printf("%c",b);
}
}
printf("\n");
}
}
}
return 0;
}