算法练习

今天练习了两道算法题目

1、100!的正约数个数

首先明白怎样计算一个数的正约数个数,以180举例

100!数目相对来说比较大,我使用180这个数来分析。
第一步:找出180以内的所有质数,(1不是质数)
180的约数【2,3,5,7,11,13,17…】
第二步:
如180=2* 2* 3* 3* 5
180的约数个数为(1+2)(1+2)(1+1)=18个。
也就是说找出每一个180除以每一个质数所得的幂在加一相乘。

这个方法使用了小学学习的求约数的算式

package moni;

import java.math.BigInteger;

public class yueshu {
    public static void main(String[] args) {
        long count = 0;
        long zong = 1;
        BigInteger sum = new BigInteger(factorial(100));//100的阶乘计算
        for (long i = 1; i <= sum.bitLength(); i++) {
            if (sum.byteValue() % i == 0) {
                count++;
            }
            zong *= count;
        }
        System.out.println(zong);
    }

    public static String factorial(int count) {//定义一个单独的方法计算阶乘
        BigInteger result = new BigInteger(String.valueOf(1));
        for (int i = 1; i <= count; i++) {
            BigInteger i_value = new BigInteger(String.valueOf(i));
            result = result.multiply(i_value);
        }
        return result.toString();
    }
}

2、粘木棍问题,有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小。

第一行两个整数N,M。 一行N个整数,表示木棍的长度。

一行一个整数,表示最小的差距

我首先想到的是Arrays.sort()方法,先将木棍的长度进行排序,然后再定义一个数组,将长的木棍放入该数组,最后将最短的木棍加入最长的木棍上面,最后相减即可

package algorithm;

import java.util.Arrays;
import java.util.Scanner;

//粘木棍
public class lianxi09 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] array = new int[n];
        for (int i = 0; i < array.length; i++) {
            array[i] = sc.nextInt();
        }
        Arrays.sort(array);// 对木棍的长度进行排序
        int[] chang = new int[m];// 新建长木棍数组
        for (int i = n - 1; i >= 0; i--) {
            for (int j = m - 1; j >= 0; j--) {
                chang[j] = array[i];
            }
        }
        for (int i = n - m - 1; i >= 0; i--) {
            chang[0] += array[i];
            Arrays.sort(chang);
        }
        System.out.println(chang[m - 1] - chang[0]);
    }
}

 

posted on 2022-03-29 21:10  跨越&尘世  阅读(87)  评论(0编辑  收藏  举报