A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*         两个数值a,b元素数都为n,使a,b数组重新组合,
         使a数组各元素的和与b数组各元素的和只差最小.
         
         思路: 先将a,b数组组合成c数组,c数组排序后,a取c数组两头,b取c数组中间.
                        排序后首位相加最接近,所以差最小
               看不明白的地方可以回复.
         */

class Dome2 {               
        public static final int MIUI = 520;
        public static void main(String[] args) {
                int[] arr = {1,5,3,4,2,9};
                int[] brr = {6,7,1,9,8,4};
                int[] crr =new int[12];
                for (int i = 0;i < crr.length/2 ;i++ ) {
                        crr[i] = arr[i];
                }
                for (int i = arr.length;i < crr.length ; i++) {
                        crr[i] = brr[i-arr.length];
                }
                for (int i = 0;i < crr.length ;i++ ) {                        //冒泡排序法
                        for (int j = 0;j < crr.length-1;j++ ) {
                                if (crr[j]<crr[j+1]) {
                                int temp = crr[j];
                                crr[j] = crr[j+1];
                                crr[j+1] = temp;
                                }
                        }
                }
                for (int i = 0;i < crr.length ;i++ ) {                        //重组数组,a数组取c数组两头,b取c数组中间
                        if (i <= 2) {
                                arr[i] = crr[i];
                        }else if (i>=3 && i <=8) {
                                brr[i-3] = crr[i];
                        }else {
                                arr[i-6] = crr[i];
                        }
                }
                String stra="{";
                for (int i = 0;i < arr.length ;i++ ) {                        //输出a数组
                        if (i==arr.length-1) {
                                stra+=arr[i] + "}";
                        }else {
                                stra+=arr[i]+", ";
                        }
                }
                        System.out.println("a数组为:  " + stra + "\n");

                String strb="{";
                for (int i = 0;i < brr.length ;i++ ) {                        //输出b数组
                        if (i==brr.length-1) {
                                strb+=brr[i] + "}";
                        }else {
                                strb+=brr[i]+", ";
                        }
                }
                        System.out.println("b数组为:  " + strb);
        }
}


运行结果.png (40.17 KB, 下载次数: 27)

运行结果

运行结果

32 个回复

倒序浏览
dxw 来自手机 中级黑马 2016-3-28 17:14:57
沙发
感谢分享,收藏了
回复 使用道具 举报
感谢分享!
回复 使用道具 举报
有思路就很好做了,收藏了
回复 使用道具 举报
很厉害啊!
回复 使用道具 举报
6666666666666666
回复 使用道具 举报
使a数组各元素的和与b数组各元素的和只差最小
没看懂这句话,能解释清楚吗?

点评

也就是让a,b属于重新组合,各数组元素还为n,使a数组的元素和,与b数组的元素和最接近,也就是差最小。这样明白吗?  发表于 2016-3-29 21:56
回复 使用道具 举报
灵魂灬丿丶轩 来自手机 中级黑马 2016-3-29 21:57:44
8#
a292723685 发表于 2016-3-29 12:31
使a数组各元素的和与b数组各元素的和只差最小
没看懂这句话,能解释清楚吗? ...

都怪我打错别字了
回复 使用道具 举报
感谢分享
回复 使用道具 举报
感谢分享,收藏下
回复 使用道具 举报
学习了学习了
回复 使用道具 举报
技术不错,赞一个
回复 使用道具 举报
真任性,不愧是0310的好手
回复 使用道具 举报
非常改写分享,谢谢
回复 使用道具 举报
举个例子验证一下:也是12个数,如下:
1,2,3,10,20,30,40,50,60,100,200,300
不一定能实现吧?
回复 使用道具 举报
感谢分享,谢谢楼主了
回复 使用道具 举报
ipursue 来自手机 中级黑马 2016-3-30 10:05:25
17#
好题,很考验思维逻辑,数学思想不好的很难想到
回复 使用道具 举报
ipursue 来自手机 中级黑马 2016-3-30 10:07:45
18#
ping3014 发表于 2016-3-29 23:36
举个例子验证一下:也是12个数,如下:
1,2,3,10,20,30,40,50,60,100,200,300
不一定能实现吧? ...

可以实现,保证重新分配的两个数组元素和相差最小
回复 使用道具 举报
感谢分享
回复 使用道具 举报
学习了,收藏!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马