PAT——乙級1036&乙級1027(有坑)
阿新 • • 發佈:2018-12-26
乙級1036
1036 跟奧巴馬一起程式設計 (15 point(s))
美國總統奧巴馬不僅呼籲所有人都學習程式設計,甚至以身作則編寫程式碼,成為美國曆史上首位編寫計算機程式碼的總統。2014 年底,為慶祝“電腦科學教育周”正式啟動,奧巴馬編寫了很簡單的計算機程式碼:在螢幕上畫一個正方形。現在你也跟他一起畫吧!
輸入格式:
輸入在一行中給出正方形邊長 N(3≤N≤20)和組成正方形邊的某種字元 C,間隔一個空格。
輸出格式:
輸出由給定字元 C 畫出的正方形。但是注意到行間距比列間距大,所以為了讓結果看上去更像正方形,我們輸出的行數實際上是列數的 50%(四捨五入取整)。
輸入樣例:
10 a
輸出樣例:
aaaaaaaaaa a a a a a a aaaaaaaaaa
這個就很簡單了
#include<cstdio> #include<cmath> int main(){ int n; char a; scanf("%d %c",&n,&a); for(int i=0;i<round(float(n)/2.);i++){ for(int j=0;j<n;j++){if(i==0||i==round(float(n)/2.)-1){ printf("%c",a); }else{ if(j==0||j==n-1){ printf("%c",a); }else{ printf(" "); } } } printf("\n"); } return 0; }
乙級1027
1027 列印沙漏 (20 point(s))
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印
***** *** * *** *****
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉儘可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
***** *** * *** ***** 2
這道題簡直有毒。。。。我嚴重懷疑出題的嚴謹性。
我第一次提交程式碼,是兩個Answer Wrong。我又修改了一下。。。這兩個成為 Presentation Error格式錯誤了。。。我百思不得其解。
然後看演算法筆記的解法。。。雖然跟我的不一樣。但是他輸出的時候
每一行直接換行了,而我是又輸出了幾個空格。跟最長的一樣長了才換行的。看著是一模一樣的。天知道這有個這麼大的坑呀。。。他的輸出格式裡又沒有規定。。。坑爹呀。
我的解法是先算出了上面倒三角形總共有幾行,再一行一行的輸出。比較麻煩。。。
#include<cstdio> #include<cmath> int main(){ int N,n,temp,j; char c; scanf("%d %c",&N,&c); n=int(sqrt((N-1)/2.+1)); if(n==0&&n>0) n=n-1; if(n==1) printf("%c\n",c); else{ for(int i=0;i<n;i++){ for(j=0;j<i;j++){ printf(" "); } for(;j<2*n-1-i;j++){ printf("%c",c); } printf("\n"); } for(int i=n-2;i>=0;i--){ for(j=0;j<i;j++){ printf(" "); } for(;j<2*n-1-i;j++){ printf("%c",c); } printf("\n"); } } if(n!=0) printf("%d\n",N-(n*n-1)*2-1); else printf("%d\n",n); return 0; }