- 叠筐
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
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@ @@@ 寻找每一行列字符出现与循环次数的关系,采用模拟的方法求解。 但注意有一个易WA点就是n=1时的输出要单独讨论,并且在两个答案之间的空行是指输出之间要有一个空行,并且一旦没有后续输入,则没有这个空行。#include <iostream> using namespace std; int main() { int n,q=0; char a,b; while(cin>>n>>a>>b) { char A,B,C[81]; int flag=0; if(n==1) { if(q) cout<<endl; cout<<a<<endl;continue; } if(q) cout<<endl;//用q标记,在最开始输出空行则一个输出对应一个空行,并且第一个数据不需要输出空行 if(((n+1)/2)%2==0) {A=b;B=a;} else {A=a;B=b;} for(int i=1;i<=n;i++) C[i]=A; for(int i=1;i<=n-1;i++) { if(i==1)//第一行和最后一行单独输出。 { cout<<" "; for(int j=2;j<=n-1;j++) cout<<A; cout<<" "<<endl; } if(i==n-1) { cout<<" "; for(int j=2;j<=n-1;j++) cout<<A; cout<<" "<<endl; break; } if(i<n/2+1)//模拟规律,将其以中心为对称轴,我们可以看出每一次循环该字符串中心部分会不断的改变,并且左右对称变化,改变的长度也不断改变。 { if(flag) { for(int x=1+i;x<=n-i;x++) C[x]=A; flag=0; } else { for(int x=i+1;x<=n-i;x++) C[x]=B; flag=1; } } else { if(flag) { for(int x=n-i;x<=i;x++) C[x]=A; flag=0; } else { for(int x=n-i;x<=i;x++) C[x]=B; flag=1; } } for(int y=1;y<=n;y++) cout<<C[y]; cout<<endl; } q++; } return 0; }