PAT——1027. 打印沙漏
生活随笔
收集整理的這篇文章主要介紹了
PAT——1027. 打印沙漏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印
************ *****所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉盡可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(<=1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最后在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *輸出樣例:
************ ***** 21 package com.hone.basical; 2 3 import java.util.Scanner; 4 5 /** 6 * 原題目:https://www.patest.cn/contests/pat-b-practise/1025 7 * 8 * @author Xia 有一個陷阱:后面的空格不能要啊 同時這種打印的問題一定要從第一行開始考慮(因為基于基礎語言打印的情況都是順序打印的) 9 */ 10 public class basicalLevel1027PrintStone { 11 public static void main(String[] args) { 12 Scanner s = new Scanner(System.in); 13 int n = s.nextInt(); 14 String e = s.next(); 15 int sum = 0; // 表示當前總共數量 16 int end = 0; // 利用end表示結束的時候總共打印多少行 17 int left = 0; // 表示剩余***的個數 18 for (int i = 0; sum < n; i++) { 19 sum = fx(i); 20 if (sum > n) { // 如果當前sum循環中計算超過了總的n,則調出循環,并且減去當前i層總*數,同時調出循環 21 end = i - 1; 22 left = n - (sum - 4 * i - 2); 23 break; 24 } 25 } 26 // 該循環用于輸出倒三角的形狀 27 for (int j = end; j >= 0; j--) { 28 // 打印左邊的空格 29 for (int i = 0; i < (2 * end + 1 - (2 * j + 1)) / 2; i++) { 30 System.out.print(" "); 31 } 32 for (int i = 0; i < 2 * j + 1; i++) { 33 System.out.print(e); 34 } 35 System.out.println(); 36 } 37 38 // 該循環用于輸出下方的正三角形 39 for (int j = 1; j <= end; j++) { 40 for (int i = 0; i < (2 * end + 1 - (2 * j + 1)) / 2; i++) { 41 System.out.print(" "); 42 } 43 for (int i = 0; i < 2 * j + 1; i++) { 44 System.out.print(e); 45 } 46 System.out.println(); 47 } 48 49 //最后一行打印所有剩余的 * 數 50 System.out.print(left); 51 } 52 53 // 首先利用遞歸來求解sum的總和(實際上這里不太推薦使用遞歸,可以利用一個循環來代替遞歸) 54 public static int fx(int i) { 55 if (i == 0) 56 return 1; 57 else 58 return fx(i - 1) + 4 * i + 2; 59 } 60 }
?
轉載于:https://www.cnblogs.com/xiaxj/p/7985808.html
總結
以上是生活随笔為你收集整理的PAT——1027. 打印沙漏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RANSAC算法在图像拼接上的应用的实现
- 下一篇: 程序设计和c语言ppt,程序设计和C语言