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 }