叠筐
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14628 Accepted Submission(s): 3812
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@ @@@
Author
qianneng
思路,很简单,定一个二维数组,从外到里一层一层覆盖;每覆盖一次,半径就减一;那么首先输出的就跟输入的大小+1对2取余决定,这一点可以观察出来,然后就是写代码了,附ac代码.
#include<stdio.h>
int main()
{
int i,j,k=0,n,l,w,m;
char a,b,c,nm[80][80];
while(scanf("%d %c %c",&n,&a,&b)!=EOF)
{
if(k)
printf("\n");//这儿容易pe;以后要看好题在写代码.
k++;
w=0;m=n;
if((n+1)/2%2==0)//确定最外一层是什么;
c=b;
else
c=a;
while(m-w!=-1)
{
for(i=w;i<m;i++)
{
for(j=w;j<m;j++)
{
if((i==0&&j==0)||(i==n-1&&j==n-1)||(i==0&&j==n-1)||(i==n-1&&j==0))
nm[i][j]=' ';
else
nm[i][j]=c;//排版;
}
}
if(c==a)
c=b;//交换覆盖;
else
c=a;
w++;
m--;
}
if(n==1)
printf("%c\n",a);
else
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%c",nm[i][j]);//输出结果.
printf("\n");
}
}
}
return 0;
}