叠筐
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
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 #include<iostream>
2 using namespace std;
3
4 char map[85][85];
5
6 int main()
7 {
8 int n,i,j,mark;
9 char a,b,t=0;
10 while(scanf("%d %c %c",&n,&a,&b)!=EOF)
11 {
12 if(t) putchar('\n');
13 if((n-1)%4)
14 {
15 t=a;
16 a=b;
17 b=t;
18 }
19 t=a,mark=1;
20 for(i=0;i<=n/2;i++)
21 {
22 t=a;
23 mark=1;
24 for(j=0;j<n;j++)
25 {
26 if(n!=1&&i==0&&(j==0||j==n-1))//注意n==1的时候
27 {
28 putchar(' ');
29 map[i][j]=' ';
30 continue;
31 }
32 map[i][j]=t;
33 putchar(t);
34 if(i>j||j>=(n-1)-i)//字符变换的范围
35 {
36 if(mark)
37 {
38 t=b;
39 mark=0;
40 }
41 else
42 {
43 t=a;
44 mark=1;
45 }
46 }
47 }
48 putchar('\n');
49 }
50 for(i=n/2-1;i>=0;i--)
51 {
52 for(j=0;j<n;j++)
53 {
54 printf("%c",map[i][j]);
55 }
56 putchar('\n');
57 }
58 }
59 return 0;
60 }