pat1027

作者: hsinsDfy | 来源:发表于2018-10-05 21:54 被阅读0次

    1027 打印沙漏 (20 分)

    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印





    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
    输入格式:

    输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
    输出格式:

    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
    输入样例:

    19 *

    输出样例:





    2

    #include<iostream>
    #include<vector>
    using namespace std;
    int main(){
        int N;
        char c;
        cin>>N>>c;
        int t=0;
        vector<int>a;
        //a.push_back(1);
        if(N>=7){
        
            N-=1;
        int t=3;
        while(N>=2*t){
        a.push_back(t);
        N=N-2*t;
        t=t+2;
        
        }
    }
    
        else
            cout<<c<<endl<<N-1;
        vector<int>::iterator it;
        if(!a.empty()){
        int beg=*(a.end()-1);
    
        for(it=a.end()-1;it!=a.begin();--it ){
            int temp=*it;
            for(int j=(beg-temp)/2;j>0;--j)
                cout<<" ";
            while(temp!=0){
                cout<<c;
                --temp;
            }
            
            cout<<endl;
        }
        for(int j=(beg-*(a.begin()))/2;j>0;--j){
            cout<<" ";
        }
        for(int j=*(a.begin());j>0;--j){
            cout<<c;
        }
    
        cout<<endl;
        for(int j=(beg-1)/2;j>0;--j){
            cout<<" ";
        }
        cout<<c;
        cout<<endl;
    
        for(it=a.begin();it!=a.end();++it ){
            int temp=*it;
            for(int j=(beg-temp)/2;j>0;--j)
                cout<<" ";
            while(temp!=0){
                cout<<c;
                --temp;
            }
            cout<<endl;
        }
        cout<<N<<endl;
        }
    
        
        
        system("pause");
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:pat1027

        本文链接:https://www.haomeiwen.com/subject/fpccaftx.html