有兩個數(shù)組a,b, 大小都是n,數(shù)組元素的值任意,無序. 要求:通過交換a b中的元素,使數(shù)組a元素的和與數(shù)組b元素的和之間的差最小

題目:有兩個數(shù)組a,b, 大小都是n,數(shù)組元素的值任意,無序. 要求:通過交換a b中的元素,使數(shù)組a元素的和與數(shù)組b元素的和之間的差最小

分析:

假設(shè)a中的元素之和是suma,b中的元素之和是sumb. 差是diff = suma - sumb.數(shù)組a中任意一個元素a[i]和b數(shù)組中的任意一個元素b[j],如果a[i]和b[j]交換后能讓diff的絕對值變小,就交換a[i]和b[j],否則就尋找下一對a[i]和b[j],當(dāng)所有的a[i]和所有的b[j]都不能滿足讓diff的絕對值變小時,就得到了我們想要的數(shù)組.如下:

偽代碼
//假設(shè)交換后的差值是diff_after,則交換后
suma(交換后) = suma(交換前) - a[i] + b[j]
sumb(交換后) = sumb(交換前) - b[j] + a[i]
//兩個等式相減可得:
diff_after = (suma (交換前)  - sumb (交換前) ) - 2( a[i] - b[j])
           = diff - 2(a[i] - b[j])
//交換后的絕對值小于交換前,也就是abs(diff_after) < abs(diff_before)
C代碼
void exchange(int *a, int *b, int n, int diff_before){
    for (int i = 0; i < n; i ++) {
        for (int j = 0; j < n; j ++) {
            int diff_after = diff_before - 2 * (a[i] - b[j]);
            if (abs(diff_after) < abs(diff_before)) {
                swop(&a[i],&b[j]);
                exchange(a,b,n,diff_after);
                return;
            }
        }
    }
}
// 計算數(shù)組a - b的值
int diffa_b(int *a, int *b, int n){
    // 計算a的和 b的和
    int suma = 0;
    int sumb = 0;
    for (int i = 0; i < n; i ++) {
        suma += a[i];
        sumb += b[i];
    }
    // a b 和的差
    return suma - sumb;
}
// 交換
void swop(int *x, int *y){
    int z = *x;
    *x = *y;
    *y = z;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,081評論 0 2
  • 專業(yè)考題類型管理運行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,675評論 0 13
  • 數(shù)組在程序設(shè)計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱...
    朱森閱讀 4,283評論 2 13
  • 蔡家塘靜臥在姣龍似的高鐵下,綠樹翠竹掩映著農(nóng)舍,花香鳥語氤氳著農(nóng)舍,莊稼果木環(huán)抱著農(nóng)舍,蜿蜒河流纏繞著農(nóng)舍...
    菜菜涵鈺閱讀 898評論 4 4
  • 微表情心理學(xué)是近幾年頗為流行的心理學(xué)細(xì)分科目,之所以迅速盛行的原因一方面可能是人們覺得通過細(xì)微的表情可以解讀出復(fù)雜...
    章非閱讀 4,529評論 2 5

友情鏈接更多精彩內(nèi)容