HDU-2074-叠筐

 

分析:

1. 为了一致性,首先要确定外边先赋值谁。当行数为奇数二倍-1时,最外层是中心块。否则是外框字符。

2.然后遍历赋值时候。从上到下。漏斗形状赋值。同步过程中,由于图形对称,坐标反一下即可。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 #define M 100
 5 char p[M][M];
 6 char a,b;
 7 int n;
 8 void print()
 9 {
10     int start,end;
11     for(int i=1;i<=n;i+=2)
12     {
13         start = i>n-i+1?n-i+1:i;
14         end = i>n-i+1?i:n-i+1;
15         for(int j=start;j<=end;j++)
16         {
17             p[i][j] = a;
18             p[j][i] = a;
19         }
20     }
21     for(int i=2;i<=n;i+=2)
22     {
23         start = i>n-i+1?n-i+1:i;
24         end = i>n-i+1?i:n-i+1;
25         for(int j=start;j<=end;j++)
26         {
27             p[i][j] = b;
28             p[j][i] = b;
29         }
30     }
31     p[1][1] = p[n][n] = p[n][1] = p[1][n] = ' ';
32     for(int i = 1;i<=n;i++)
33     {
34         for(int j = 1;j<=n;j++)
35             printf("%c",p[i][j]);
36         printf("\n");
37     }
38 }
39 int main()
40 {
41     int cnt = 0;
42     while(~scanf("%d %c %c",&n,&a,&b))//scanf输入字符时候要千万注意
43     {
44         getchar();
45         if(cnt++)
46         {
47             printf("\n");//这是为了满足题目条件的输出
48         }
49         if(n == 1)//如果n=1;直接输出中心块。
50         {
51             printf("%c\n",a);
52             continue;
53         }
54         if(((n+1)/2)%2==0)
55         {
56             char temp = a;
57             a = b;
58             b =temp;
59         }
60         print();
61     }
62     return 0;
63 }

 

posted @ 2018-07-24 21:44  kpole  阅读(187)  评论(0编辑  收藏  举报