分析:
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(" "); 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(" ");//这是为了满足题目条件的输出 48 } 49 if(n == 1)//如果n=1;直接输出中心块。 50 { 51 printf("%c ",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 }