解题报告:注意两点:a,当n=1的情况。b,第一行和最后一行最后的空格也要输出
code:
#include<cstdio> #include<iostream> #include<cstring> #include<string> #include<sstream> #include<algorithm> #include<math.h> #include<queue> #include<stack> #include<map> #include<set> using namespace std; typedef long long ll; const int maxn=85; char s[maxn][maxn]; int main() { // freopen("input.txt","r",stdin); int n,flag=0; char a,b; while(~scanf("%d %c %c",&n,&a,&b)){ if(n==1){ if(flag==1) printf("\n"); printf("%c\n",a); flag=1; continue; } else if(((n-1)/2)%2==0){ for(int k=0;k<n/2;k++){ /*层数*/ for(int i=k;i<n-k;i++){ if(k%2==0){ s[i][k]=a;s[i][n-1-k]=a; } else { s[i][k]=b;s[i][n-1-k]=b; } } for(int j=k+1;j<n-k-1;j++){ if(k%2==0){ s[k][j]=a;s[n-1-k][j]=a; } else { s[k][j]=b;s[n-1-k][j]=b; } } } }else{ for(int k=0;k<n/2;k++){ /*层数*/ for(int i=k;i<n-k;i++){ if(k%2==0){ s[i][k]=b;s[i][n-1-k]=b; } else { s[i][k]=a;s[i][n-1-k]=a; } } for(int j=k+1;j<n-k-1;j++){ if(k%2==0){ s[k][j]=b;s[n-1-k][j]=b; } else { s[k][j]=a;s[n-1-k][j]=a; } } } } s[n/2][n/2]=a; if(flag==1) printf("\n"); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if((i==0 && j==0)||(i==n-1 && j==0)) printf(" "); else if((i==0&&j==n-1)||(i==n-1&&j==n-1)) printf(" "); else printf("%c",s[i][j]); } printf("\n"); } flag=1; } return 0; }