java – 打印给定数量的所有独特的因素组合

前端之家收集整理的这篇文章主要介绍了java – 打印给定数量的所有独特的因素组合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是打印所有唯一的正整数因子组合的最有效的算法.例如,如果给定的数字是24,则输出应该是
24*1
12*2
8*3
6*4
6*2*2
4*3*2
3*2*2*2

这里注意到当打印6 * 4时,4 * 6不会被打印出来.因此,基本上这是一个不考虑订单的唯一子集的问题(一种查看问题的方法).但目标是具有运行最快的功能,因此将数据存储在数据结构中以进一步操作可能会消耗更多的时间.我已经尝试过我的算法并粘贴了我的代码,但似乎没有给我所需的结果,我在递归调用中犯了一些错误.你能帮我找出一个有效的方法吗?

public static void printfact(int num){
        int temp=0;
        for(int i=num-1;i>=num/2;i--){
            if(num % i == 0){
                temp = num/i;
                System.out.println(temp + " * " + i);
                if(isprime(i)==false){
                    System.out.print(temp + " * ");
                    printfact(i);
                }
            }
        }
}

解决方法

尝试这种递归方法,它还需要2个输入,即一个字符串来传递i的for current的当前值,以执行后续的减少,还有一个temp int知道何时不打印重复的反转,即8 * 3和3 * 8.
public static void printFactors(int number,String parentFactors,int parentVal) {
    int newVal = parentVal;
    for (int i = number - 1; i >= 2; i--) {

        if (number % i == 0) {
            if (newVal > i) {
                newVal = i;
            }
            if (number / i <= parentVal && i <= parentVal
                    && number / i <= i) {
                System.out.println(parentFactors + i + "*" + number / i);
                newVal = number / i;
            }

            if (i <= parentVal) {
                printFactors(number / i,parentFactors + i + "*",newVal);
            }
        }

    }

}

并使用printFactors(12,’,12)调用方法让我知道,如果你发现这种方法的缺陷.谢谢!

原文链接:https://www.f2er.com/java/126618.html

猜你在找的Java相关文章