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;
}