PAT練習集天梯賽L1-002. 列印沙漏–JAVA

NO IMAGE

由於之前在準備比賽的時候刷了很多題,在pat上練習的過程中百度發現部落格中的參考大部分是c/c 的,所以想把自己做的Java程式碼貼出來給需要的人蔘考。    

                                      L1-002. 列印沙漏

本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印

*****
***
*
***
*****

所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。

給定任意N個符號,不一定能正好組成一個沙漏。要求列印出的沙漏能用掉儘可能多的符號。

輸入格式:

輸入在一行給出1個正整數N(<=1000)和一個符號,中間以空格分隔。

輸出格式:

首先列印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。

輸入樣例:

19 *

輸出樣例:

*****
***
*
***
*****
2

【分析】這個題目列印圖形,比較簡單,直接遍歷輸出,不過要注意空格符號的處理。完整的Java程式碼如下。

package 列印沙漏; 
import java.util.Scanner; 
public class Main { 
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String input=sc.nextLine(); 
String[] ss=input.split(" "); 
sc.close();
int num=Integer.parseInt(ss[0]); 
String code=ss[1];
int sum=0;
int sign =0;
if(num==1){
System.out.println(code);
System.out.println(0);
return;
}
for (int i = 1; i < num; i=i 2) {
sum =i;
if(sum>num/2){
sign=i-2; 
sum=(sign 1)/2 * (sign 1)-1;
break;
}
} 
for (int i = sign; i > 0 ; i=i-2) {
for (int j = 0; j < (sign-i)/2; j  ) {
System.out.print(" ");
}
for (int j = 0; j < i; j  ) {
System.out.print(code);
}
System.out.println();
}
for (int i = 3; i <= sign ; i=i 2) {
for (int j = 0; j < (sign-i)/2; j  ) {
System.out.print(" ");
}
for (int j = 0; j < i; j  ) {
System.out.print(code);
}
System.out.println();
}
System.out.println(num-sum);
} 
}