1027 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
#include <iostream> #include <math.h> using namespace std; int main() { int N,m=0,n,n2,i=1,x,N2,sum=1; char ch; cin>>N>>ch; if(N>6) { N2=N; do { i++; m++; n=2*m-1; x=(2*i-1)*2; sum=sum+x; //cout<<x; //cout<<"\n"; }while(sum<=N); //cout<<sum-x<<"\n"<<N; N2=N-sum+x; n2=n; do { for(int i2=1;i2<=(n2-n)/2;i2++) { cout<<" "; } for(int j2=1;j2<=n;j2++) { cout<<ch; } cout<<"\n"; n=n-2; }while(n>=1); n=n+4; do { for(int i3=1;i3<=(n2-n)/2;i3++) { cout<<" "; } for(int j3=1;j3<=n;j3++) { cout<<ch; } cout<<"\n"; n=n+2; }while(n<=n2); if(N2!=0) { cout<<N2; } } else { N2=N; do { i++; m++; n=2*m-1; x=(2*i-1)*2; sum=sum+x; //cout<<x; //cout<<"\n"; }while(sum<=N); //cout<<sum-x<<"\n"<<N; N2=N-sum+x; cout<<ch<<"\n"; if(N2!=0) { cout<<N2; } } return 0; }
关于作者