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