oj-2074

题目:叠筐

2074.png

思路:一开始直接从第一行到最后一行排出,到中间时,需有一个判断,因为在输出时,以输入一边,输入中间,在输入另一边的格式出来,判断它过中间了,给它加上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;
                }
            }}
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容