1027 打印沙漏(JAVA)

短命女 2023-09-28 18:04 21阅读 0赞

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

  1. *****
  2. ***
  3. *
  4. ***
  5. *****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:

  1. 19 *

输出样例:

  1. *****
  2. ***
  3. *
  4. ***
  5. *****
  6. 2

代码实现:

  1. package 暑期特训__社区.PAT21_30;
  2. import java.io.*;
  3. /**
  4. * @author yx
  5. * @date 2022-07-15 17:06
  6. */
  7. public class NO1027 {
  8. static PrintWriter out=new PrintWriter(System.out);
  9. static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
  10. static StreamTokenizer in=new StreamTokenizer(ins);
  11. public static void main(String[] args) throws IOException {
  12. String[] split=ins.readLine().split("\\s");
  13. int n=Integer.parseInt(split[0]);
  14. String s=split[1];
  15. int t=0;
  16. // if(n==1){//这个地方可以不用特判,下面的表达式中包含了n=1的这种情况
  17. // System.out.println(s);
  18. // System.out.println(0);
  19. // return;
  20. // }
  21. for (int i = 1; i <25 ; i++) {
  22. if((i*i*2-1)<=n){
  23. t=i;
  24. }else {
  25. break;
  26. }
  27. }
  28. //剩余没用的数量
  29. int ans=n-t*t*2+1;
  30. for (int i = t; i >0; i--) {
  31. for (int k = t; k >i ; k--) System.out.print(" ");
  32. for (int j = 2*i-1; j >0 ; j--) System.out.print(s);
  33. // for (int k = t; k >i ; k--) System.out.print(" ");//这后面输出的空格也是多余的,不要自作聪明
  34. System.out.println();
  35. }
  36. for (int i = 2; i <=t; i++) {
  37. for (int k = t; k >i ; k--) System.out.print(" ");
  38. for (int j = 2*i-1; j >0 ; j--) System.out.print(s);
  39. System.out.println();
  40. }
  41. System.out.println(ans);
  42. }
  43. }

发表评论

表情:
评论列表 (有 0 条评论,21人围观)

还没有评论,来说两句吧...

相关阅读

    相关 1027.打印

    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“\”,要求按下列格式打印 所谓“沙漏形状”,是指每