题目:叠筐
思路:一开始直接从第一行到最后一行排出,到中间时,需有一个判断,因为在输出时,以输入一边,输入中间,在输入另一边的格式出来,判断它过中间了,给它加上num=4,后面就在num的基础上在加4,用以抵消后面k增长的2,其实总的就是要其只升2。后面一边的格式是与前面相反的排序,只需赋值相反即可。
但在提交时,却在1时没有输出且不按题目的要求输出,在题目要求是从内到外排序,而我做题却是从外到内,于是有规律在输入的外筐尺寸n有(n-1)/2是否奇数来相反。本来经过一顿骚操作后,准备ac时,出现了最坑的一处:输出格式问题,在除第一个输出外,后面输出都要在前面多除一个空行。这个地方与2091有着相同的坑。
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,flag=0;
char a,b,c,f=0;
while(cin>>n>>a>>b){
if(flag!=0) cout<<endl;
flag++;
if(n==1){
cout<<a<<endl;
}else{
char ll;
if(((n-1)/2)%2==1){
ll=a;
a=b;
b=ll;
}
char ji[81];
int t = n,i,j,d,h,k=2,m,num=4;
ji[0]=a;
for(i=1;i<t;i++){
if(ji[i-1]==a){
ji[i]=b;
}else{
ji[i]=a;
}
}
while(n--){
if(n==t-1 || n==0){
cout<<' ';
for(i=0;i<t-2;i++) cout<<a;
cout<<' ';
cout<<endl;
}else{
h=t-k;
if(k>=t+1){
h=h+num;
num+=4;;
}
k/=2;
for(j=0;j<(t-h)/2;j++){
cout<<ji[j];
}
for(d=0;d<h;d++){
cout<<ji[j];
}
for(j=(t-h)/2;j>0;j--){
cout<<ji[j-1];
}
k=k*2+2;
cout<<endl;
}
}}
}
}