叠筐

    xiaoxiao2021-03-25  107

    叠筐

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 19905    Accepted Submission(s): 5224 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@ @@@

    解题报告:注意两点: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; }

    转载请注明原文地址: https://ju.6miu.com/read-17745.html

    最新回复(0)