珠海做网站哪家好,WordPress阿里云超标,建设银行网站下载中心,域名信息备案管理系统官网本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”#xff0c;要求按下列格式打印 ************
*****所谓“沙漏形状”#xff0c;是指每行输出奇数个符号#xff1b;各行符号中心对齐#xff1b;相邻两行符号数差2#xff1b;符号数先从大到小顺序递减… 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”要求按下列格式打印 ************
*****所谓“沙漏形状”是指每行输出奇数个符号各行符号中心对齐相邻两行符号数差2符号数先从大到小顺序递减到1再从小到大顺序递增首尾符号数相等。 给定任意N个符号不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。 输入格式 输入在一行给出1个正整数N1000和一个符号中间以空格分隔。 输出格式 首先打印出由给定符号组成的最大的沙漏形状最后在一行中输出剩下没用掉的符号数。 输入样例 19 *输出样例 ************
*****
2 1 package com.hone.basical;2 3 import java.util.Scanner;4 5 /**6 * 原题目https://www.patest.cn/contests/pat-b-practise/10257 * 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