当前位置:   article > 正文

【PTA-训练day1】L2-012 关于堆的判断 + L1-002打印沙漏_pta打印沙漏测试点

pta打印沙漏测试点

目录

L2-012 关于堆的判断 - 优先队列+哈希表

L1-002 打印沙漏 - 20

L1-003 个位数统计 - 15

L1-007 念数字 - 10


L2-012 关于堆的判断 - 优先队列+哈希表

PTA | 程序设计类实验辅助教学平台

大顶堆:每个结点的值都大于等于其左右孩子结点的值;

小顶堆:每个结点的值都小于等于其左右孩子结点的值。

思路:

  • 用优先队列PriorityQueue来实现小顶堆
  • 把小顶堆转化为数组 并更改数组下标从1开始 这样idx/2就是父节点
  • 用map存 < 结点值,下标 >
  • 逐步实现四个查询步骤即可 详见代码

拓展知识点:

  1. import java.util.*;
  2. public class Main{
  3. public static void main(String[] args)
  4. {
  5. Scanner sc=new Scanner(System.in);
  6. int n=sc.nextInt(),m=sc.nextInt();
  7. Queue<Integer>q=new PriorityQueue<>();
  8. Map<Integer,Integer> mp=new HashMap<>();
  9. String s;
  10. for(int i=0;i<n;i++)
  11. q.offer(sc.nextInt());
  12. //把优先队列(小顶堆)转化到数组
  13. Integer[] t=q.toArray(new Integer[n]);
  14. int[] a=new int[n+1]; //因为索引从1开始 所以是n+1
  15. int cnt=1;
  16. //修改数组索引从1开始 这样idx/2就是父结点
  17. for(int i=0,j=1;i<n;i++)
  18. a[j++]=t[i].intValue();
  19. for(int i=1;i<=n;i++)
  20. {
  21. mp.put(a[i],cnt);
  22. cnt++;
  23. }
  24. sc.nextLine(); //接收回车
  25. while(m-->0)
  26. {
  27. boolean f=false;
  28. s=sc.nextLine();
  29. String[] str=s.split(" ");
  30. if(s.indexOf("root")!=-1)
  31. {
  32. int root=Integer.parseInt(str[0]);
  33. if(mp.get(root)==1) f=true;
  34. }else if(s.indexOf("siblings")!=-1)
  35. {
  36. int l=Integer.parseInt(str[0]);
  37. int r=Integer.parseInt(str[2]);
  38. l=mp.get(l);
  39. r=mp.get(r);
  40. if(l/2==r/2) f=true;
  41. }else if(s.indexOf("parent")!=-1)
  42. {
  43. int parent=Integer.parseInt(str[0]);
  44. int child=Integer.parseInt(str[5]);
  45. if(mp.get(child)/2==mp.get(parent)) f=true;
  46. }else{
  47. int child=Integer.parseInt(str[0]);
  48. int parent=Integer.parseInt(str[5]);
  49. if(mp.get(child)/2==mp.get(parent)) f=true;
  50. }
  51. if(f) System.out.println("T");
  52. else System.out.println("F");
  53. }
  54. }
  55. }

L1-002 打印沙漏 - 20

PTA | 程序设计类实验辅助教学平台

  1. import java.util.Scanner;
  2. public class Main
  3. {
  4. public static void main(String[] args)
  5. {
  6. Scanner sc=new Scanner(System.in);
  7. int n=sc.nextInt();
  8. String ch=sc.next();
  9. //求最大层数
  10. int max;
  11. for(int i=1;;i++)//上半部分的星号数=层数的平方 则沙漏星号总数=层数平方*2-1
  12. if(i*i*2-1>n)
  13. {
  14. max=i-1;//因为跳出循环时 比最大层数多1 所以要-1
  15. break;
  16. }
  17. int res=n-max*max*2+1;
  18. //打印上半部分
  19. int kong=0;
  20. for(int i=max;i>=1;i--)
  21. {
  22. for(int j=0;j<kong;j++) System.out.print(" ");
  23. for(int j=0;j<i*2-1;j++) System.out.print(ch);
  24. kong++;
  25. System.out.println();
  26. }
  27. //打印下半部分
  28. kong-=2;
  29. for(int i=2;i<=max;i++)
  30. {
  31. for(int j=0;j<kong;j++) System.out.print(" ");
  32. for(int j=0;j<i*2-1;j++) System.out.print(ch);
  33. kong--;
  34. System.out.println();
  35. }
  36. System.out.print(res);
  37. }
  38. }

L1-003 个位数统计 - 15

PTA | 程序设计类实验辅助教学平台

  1. import java.util.*;
  2. public class Main
  3. {
  4. public static void main(String[] args)
  5. {
  6. Scanner sc=new Scanner(System.in);
  7. String s=sc.next();
  8. int[] a=new int[10];
  9. for(int i=0;i<s.length();i++)
  10. {
  11. char c=s.charAt(i);
  12. a[c-'0']++;
  13. }
  14. for(int i=0;i<10;i++)
  15. if(a[i]>0) System.out.println(i+":"+a[i]);
  16. }
  17. }

L1-007 念数字 - 10

PTA | 程序设计类实验辅助教学平台

s.charAt(i)=='-'

equals是用于字符串的比较

  1. import java.util.*;
  2. public class Main
  3. {
  4. public static void main(String[] args)
  5. {
  6. Scanner sc=new Scanner(System.in);
  7. String[] a={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
  8. String res;
  9. String s=sc.next();
  10. boolean f=false;
  11. for(int i=0;i<s.length();i++)
  12. {
  13. if(f) System.out.print(" ");
  14. f=true;
  15. if(s.charAt(i)=='-') System.out.print("fu");
  16. else System.out.print(a[s.charAt(i)-'0']);
  17. }
  18. }
  19. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/935732
推荐阅读
相关标签
  

闽ICP备14008679号