Java 将一个数拆分成任意几个数的和

2023-02-18 00:00:00 拆分 个数 任意

Java 将一个数拆分成任意几个数的和(以下代码可否有优化之处求教)

package top.smartprinting;

import java.util.Random;

/** * @author Chief * @date 2019-07-20 16:08 * @Email MyEvery7655@gmail.com */
public class Algorithm { 

    public static void main(String[] args) { 
        //第一种:传统的方式
        dividingLine("第一种");
        splitInto(20, 21);

        //第二种:使用数组寄存分解后的数字
        dividingLine("第二种");
        int[] numberOfSplitsArrays = splitInto(20, new int[22]);
        //遍历数组
        traversing(numberOfSplitsArrays);
        //求数组所有元素的和
        summation(numberOfSplitsArrays);
    }

    /** * 将一个数拆分成任意几个数的和 * * @param number 将要被拆分的数 * @param numberOfSplits 将要被拆分成的数量 */
    private static void splitInto(int number, int numberOfSplits) { 
        Random random = new Random();
        int rawData = number;
        int temp = 0;
        for (int i = 0; i < numberOfSplits - 1; i++) { 
            if (number > 1) { 
                int j = random.nextInt(number - 1) + 1;
                number -= j;
                temp += j;
                System.out.println(j);
            } else if (temp + 1 == rawData) { 
                System.out.println(number);
                for (int j = 1; j < numberOfSplits - i; j++) { 
                    System.out.println(0);
                }
                break;
            }
        }
    }

    /** * 将一个数拆分成任意几个数的和 * * @param number 将要被拆分的数 * @param numberOfSplits 将要被拆分成的数量的数组 * @return 返回一个数组 */
    private static int[] splitInto(int number, int[] numberOfSplits) { 
        Random random = new Random();
        for (int i = 1; i < numberOfSplits.length; i++) { 
            if (number > 1) { 
                int j = random.nextInt(number - 1) + 1;
                number -= j;
                numberOfSplits[i] = j;
            } else if (number == 1) { 
                numberOfSplits[i + 1] = number;
                break;
            }
        }
        return numberOfSplits;
    }

    /** * 遍历数组的结果 * * @param numberOfSplits 被拆分的数字的数组 */
    private static void traversing(int[] numberOfSplits) { 
        System.out.println("遍历数组的结果");
        for (int i : numberOfSplits) { 
            System.out.println(i);
        }
    }

    /** * 求数组所有元素的和【用于验证上面第二种方式的正确性】 * * @param numberOfSplits 被拆分的数字的数组 */
    private static void summation(int[] numberOfSplits) { 
        int temp = 0;
        for (int i : numberOfSplits) { 
            temp += i;
        }
        System.out.println("\n校验求取数组的所有元素的和为:" + temp);
    }


    private static void dividingLine(String no) { 
        System.out.println("\n####################### " + no + " #######################");
    }

}
    原文作者:AntsCode(码蚁编程)
    原文地址: https://blog.csdn.net/AntsCode/article/details/98249244
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章