[蓝蓝计算机考研算法训练二期]-day19

34 阅读1分钟

26、完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

例如: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

1、思路

定义num记录完全数的个数,sum记录真因数的和;
当n为1时,完全数的个数为0;
当n>1时,i从2开始遍历n,j从2遍历到√i,对于每个数,只需从2遍历到√i,因为一旦有大于√i的因数j,则一定有小于√i的i/j。

2、具体实现(java)

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		int num=0,sum=1;
		if(n==1) {
			System.out.println(num);
		}else {
			for (int i = 2; i <= n; i++) {
				for (int j = 2; j*j <= i; j++) {
					if(i%j==0) {
						sum+=j;
						if(j*j<i) {
							sum+=i/j;
						}
					}
				}
				if(sum==i)num++;
				sum=1;
			}
			System.out.println(num);
		}
		
	}


27、输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1。

数据范围:节点的数量满足 0<=n<=100,节点上的值满足0<=val<=100
进阶:空间复杂度 O*(1),时间复杂度O(n)
假如输入的用例为{1,2,3,4,5,#,6,#,#,7},那么如下图:
image.png 示例1
输入:

{1,2,3,4,5,#,6,#,#,7}

返回值:

4

示例2
输入:

{}

返回值:

0

1、思路

深度优先遍历即可,当根节点为0时,返回0,否则,将左右子树的根节点作为参数递归调用该函数分别算出左右子树的高度,然后返回左右子树的高度较大者+1。

2、具体实现(java)

public int maxDepth(TreeNode root) {
	        int dep_l=0,dep_r=0;
	        if(root==null){
	            return 0;
	        }else{
	            dep_l=maxDepth(root.left);
	            dep_r=maxDepth(root.right);
	            return (dep_l>dep_r?dep_l:dep_r)+1;
	        }
	        
	    }