Day70:完全数

72 阅读1分钟

70、完全数,又称完美数或完备数,是一些特殊的自然数。

它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

例如:28,它有约数1、2、4、7、14、28,除去它本身28以外,其余5个数相加,1+2+4+7+14=28.

输入n,请输出n以内(含n)完全数的个数。

数据范围:1 <= n < 5*105

输入描述:

输入一个数字n

输出

输出不超过n的完全数的个数

示例1

输入:

1000

输出:

3

思路

定义一个bool类型的函数判断是否为完全数 在main函数中循环判断若是完全数则count+1 输出count

具体实现

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int count = 0;
   for (int i = 1; i <= N;i++){
       count += PerfectNum(i) ? 1 : 0;
   }
    System.out.println(count);
}

static boolean PerfectNum(int num){
     int ans = 0;
     for (int i = 1;i <= (num >> 1) ;i++){
         ans += num % i == 0 ? i : 0;
     }
    return num == ans;
 }

27、输入一棵二叉树,求该树的深度。

从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为1.

数据范围:节点的数量满足0 <= n <= 100,节点的值满足 0 <= val <= 100

进阶:空间复杂度O(1),时间复杂度O(n)

计入输入的用例为{1,2,3,4,5,#,6,#,#,7},

具体实现

static int treehigh(Tree root,int high){
    if (root == null)return high;
    int left = 0;
    int right = 0;
    left += treehigh(root.left,high+1);
    right += treehigh(root.right,high+1);
    return Math.max(left,right);
}