PAT_B_1027 列印沙漏 (20 分)【測試點0,3格式錯誤】【測試點2答案錯誤】
阿新 • • 發佈:2019-01-11
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印
*****
***
*
***
*****
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉儘可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
*****
***
*
***
*****
2
#include <iostream> using namespace std; int main() { int n; char tu; cin>>n>>tu; int i=1; int count=0; for( ;n-count>=i*2;i+=2) { if(i==1) count+=i; else count+=i*2; } i-=2; int remainder=n-count; int mid=i/2; for(int j=0;j<i;j++) { int abs=mid-j>0?mid-j:j-mid; for(int k=0;k<i;k++) { if(k<mid-abs) cout<<" "; else if(k<=mid+abs) cout<<tu; else break; //測試點0,3的格式錯誤原因,只在符號之前有空格,空格之後沒有空格 } cout<<endl; } if(n==1) cout<<tu<<endl<<0; //測試點1,出錯處,測試點1的測試值根據博主死磕的結果,應為1 if(n>1) cout<<remainder; return 0; }