交換兩個陣列的元素使之總和的差值最小

2021-06-21 06:00:41 字數 659 閱讀 2498

題目描述:

有兩個陣列a,b,大小都為n,陣列元素的值任意整型數,無序;

要求:通過交換a,b中的元素,使[陣列a元素的和]與[陣列b元素的和]之間的差最小。 

在「結構之法,演算法之道」部落格上看到了此題,博文中也提出了相應解法,但是發現此方法有bug,這裡給出乙個清晰的演算法思路:先合併兩個陣列,然後將其排序,然後在從大到小放入a,b陣列中,規則是先放a,再放b,直到b中的元素總和大於等於a後,再放a中,以此類推。

具體**如下:(注:因為在vc6.0中編寫,所以不支援c99標準,這裡將陣列的長度固定為5)

#include #include using namespace std; 

void process(int a,int b,int n)

else if(cura>a[i];

} cout<

for(i=0;i<5;i++)

process(a,b,5);

cout<

for(i=0;i<5;i++)

cout測試結果如下圖:

交換兩個陣列的元素,使兩個陣列和的差最小

前些時候面試碰到的題目 有兩個有序正整數陣列array1 n array2 m 通過交換兩陣列的元素,使兩個陣列的和最接近。基本演算法思路 每次從array1 array2選擇出一對能使交換後得array1和與array2和的差值變小的組合array1 i array2 j 作交換 直到對任意組合a...

交換兩個陣列使兩個陣列和的差最小

有兩個陣列a,b,大小都為n,陣列元素的值任意整形數,無序 要求 通過交換a,b中的元素,使 陣列a元素的和 與 陣列b元素的和 之間的差最小。求解思路 當前陣列a和陣列b的和之差為 a sum a sum b a的第i個元素和b的第j個元素交換後,a和b的和之差為 a sum a a i b j ...

交換兩個陣列使兩個陣列和的差最小

有兩個陣列a,b,大小都為n,陣列元素的值任意整形數,無序 要求 通過交換a,b中的元素,使 陣列a元素的和 與 陣列b元素的和 之間的差最小。求解思路 當前陣列a和陣列b的和之差為 a sum a sum b a的第i個元素和b的第j個元素交換後,a和b的和之差為 a sum a a i b j ...