编程题:最优平均分配

发布于 2022-09-01 16:36:34 字数 219 浏览 30 评论 0

---------------大神来看---------------


有一串随机的正整数(不考虑大数),然后将这些正整数 ,分配到 N组, 使之 最大的一组 与 最小的一组 两组整数和 差值最小,不需要尽可能解(倒序贪婪,最小贪婪),只求最优解!
例如 30 20 30 20 20
分成n = 2组
1。30 30
2。20 20 20

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦初启 2022-09-08 16:36:34

找最优解,可以看看遗传算法

你的背包 2022-09-08 16:36:34

算法之类的不是很懂,但这是我的一个代码。
我是这样想的。
一个数组内,里面有N+1个整数。
进行冒泡排序出最大的和最小的。
之后循环这个数组去取和。

//冒泡排序出最大和最小
        int temp;
        int[] noneSort = {30, 80, 80, 30, 88, 29, 88, 25, 25};
        for(int i = 0; i < noneSort.length-1; i++){
            for(int j = i + 1; j < noneSort.length; j++){
                temp = noneSort[i];
                if(noneSort[j] >= temp){
                    noneSort[i] = noneSort[j];
                    noneSort[j] = temp;
                }
            }
        }
        //输出打印
        log.info("{}", noneSort);
        int maxNum = noneSort[0];
        int minNum = noneSort[noneSort.length - 1];
        int max = 0, min = 0;
        for(int i = 0; i < noneSort.length; i++){
            if(noneSort[i] == minNum){    //如果等于最小值
                min += noneSort[i];
            }else if(noneSort[i] == maxNum){    //如果等于最大值
                max += noneSort[i];
            }
        }
        //输出打印
        log.info("max: {}, min: {}", max, min);

结果就是如下:

[88, 88, 80, 80, 30, 30, 29, 25, 25]
max: 176, min: 50
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文