L1-002. 打印沙漏
Posted tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L1-002. 打印沙漏相关的知识,希望对你有一定的参考价值。
L1-002. 打印沙漏
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
***** *** * *** *****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:19 *输出样例:
***** *** * *** ***** 2
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int n,i=1,j,d,max,sum=1; 6 char a; 7 cin>>n>>a; 8 while(1) 9 { 10 i+=2; 11 if(sum+i*2>n) 12 { 13 max=i-2; 14 d=n-sum; 15 break; 16 } 17 sum+=i*2; 18 19 } 20 //cout<<max<<endl; 21 for(i=max; i>=1; i-=2) 22 { 23 for(j=0; j<max; j++) 24 { 25 if(j<(max-i)/2) 26 cout<<" "; 27 else if(j>=(max+i)/2) 28 break;//没说用空格补全 29 else 30 cout<<a; 31 } 32 cout<<endl; 33 } 34 for(i=3; i<=max; i+=2) 35 { 36 for(j=0; j<max; j++) 37 { 38 if(j<(max-i)/2) 39 cout<<" "; 40 else if(j>=(max+i)/2) 41 break;// 42 else 43 cout<<a; 44 } 45 cout<<endl; 46 } 47 cout<<d<<endl; 48 return 0; 49 }
以上是关于L1-002. 打印沙漏的主要内容,如果未能解决你的问题,请参考以下文章