PAT乙级

pat1027

2018-10-05  本文已影响0人  hsinsDfy

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;
}
上一篇下一篇

猜你喜欢

热点阅读