首頁  >  文章  >  後端開發  >  使用交換最小化兩個數組中最大數的乘積

使用交換最小化兩個數組中最大數的乘積

王林
王林轉載
2023-08-29 19:21:051326瀏覽

使用交換最小化兩個數組中最大數的乘積

資料結構操作現在已成為現代程式設計和計算中成功解決方案開發的重要方面。這是由於隨著時間的推移,這些結構所呈現的複雜性不斷增加。一個例子是執行交換操作以最小化包含在兩個數組中的最大數的總和,從而降低它們的整體值。在這篇文章中,我們討論了兩種使用C 完成這些任務的方法,同時根據不同觀點承認了這兩種方法的優點和缺點。

文法

為了有效地理解C 程式語言中的方法和程式碼,我們需要對基本語法有紮實的理解。這意味著要仔細研究與我們手頭上的主題相關的組件。

Arrays: int arrayName[size];
Sorting: sort(arrayName, arrayName + size);
Swap: swap(arrayName1[index], arrayName2[index]);
Function Declaration: int functionName(type variableName);

演算法

減少兩個陣列中最大數的乘積的一種方法是使用通用演算法來交換它們的元素。為了說明這種方法,請考慮以下範例 -

  • 接受或初始化兩個陣列。

  • 對兩個陣列進行排序。

  • 從每個陣列中找到最大的元素。

  • 如果第一個陣列中的最大元素比第二個陣列中的最大元素更重要,則進行交換。

  • 重複步驟3和4,直到我們無法再最小化產品。

方法

現在,讓我們討論兩種不同的方法 −

方法一:使用內建函數

  • 第一種方法涉及在C 中使用內建的排序和交換函數。

  • 初始化或輸入兩個陣列。

  • 使用sort()函數是一個有用的工具,可以按升序排列陣列的內容。

  • 找到兩個陣列中的最大元素(在排序後的最後一個元素)。

  • 如果第一個陣列中的最大元素大於第二個陣列中的最大元素,則使用swap()函數交換元素。

  • 繼續執行此過程,直到產品無法再進一步最小化為止。

Example

#include<bits/stdc++.h>
using namespace std;

void minimizeProduct(int a[], int b[], int n) {
   sort(a, a + n);
   sort(b, b + n);
    
   for (int i = n - 1; i >= 0; --i) {
      if (a[i] > b[i])
         swap(a[i], b[i]);
      else
         break;
   }
    
   cout << "Product of maximums: " << a[n - 1] * b[n - 1] << endl;
}

int main() {
   int a[] = {5, 7, 9, 3, 6};
   int b[] = {1, 2, 6, 8, 0};
   int n = sizeof(a)/sizeof(a[0]);

   minimizeProduct(a, b, n);
    
   return 0;
}

輸出

Product of maximums: 72

Explanation

的中文翻譯為:

解釋

在執行任務之前,這種方法使用#include指令來新增函式庫。在開始時定義std命名空間可以簡化標準函式庫函數的調用,避免使用冗長的語句。進入minimizeProduct函數,其中包括兩個輸入陣列和它們的大小作為參數。

繼續,它使用內建的sort()方法對這些陣列進行升序排序,然後開始一個for循環,比較第一個和第二個陣列中的最大元素。

如果第一個數組中的最大元素大於第二個數組,則將這些元素交換以更接近解決方案。使用新交換的最大元素列印產品。內建函數如sort()和swap()幫助完成此操作而沒有問題。在main()中呼叫minimizeProduct回傳0表示成功。

方法二:不使用內建函數

在無法使用內嵌函數的情況下,這種技術可以帶來好處。我們不使用預先設定的排序和交換函數,而是創建我們自訂的變體。

  • 初始化或輸入兩個陣列。

  • 實作一個排序函數,依升序排列兩個陣列。

  • 在兩個陣列中找出最大的元素(在排序後的最後一個元素)。

  • 如果第一個陣列中的最大元素大於第二個陣列中的最大元素,則使用自訂的交換函數來交換這些元素。

  • 重複操作,直到無法再減少產品。

Example

#include<iostream>
using namespace std;

void sortArray(int arr[], int n) {
   for(int i = 0; i < n; ++i) {
      for(int j = i+1; j < n; ++j) {
         if(arr[i] > arr[j]) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
         }
      }
   }
}

void minimizeProduct(int a[], int b[], int n) {
   sortArray(a, n);
   sortArray(b, n);
    
   for (int i = n - 1; i >= 0; --i) {
      if (a[i] > b[i]) {
         int temp = a[i];
         a[i] = b[i];
         b[i] = temp;
      } else {
         break;
      }
   }
    
   cout << "Product of maximums: " << a[n - 1] * b[n - 1] << endl;
}

int main() {
   int a[] = {5, 7, 9, 3, 6};
   int b[] = {1, 2, 6, 8, 0};
   int n = sizeof(a)/sizeof(a[0]);

   minimizeProduct(a, b, n);
    
   return 0;
}

輸出

Product of maximums: 72

Explanation

的中文翻譯為:

解釋

在另一種方法中,我們放棄使用內建函數,而是手動實作排序和交換操作。我們首先編寫一個名為'sortArray'的新函數,它使用巢狀的for迴圈來比較並將元素按照所需順序交換,當輸入一個陣列時。在'minimizeProduct'中,兩個給定的數組在開始迭代之前都要進行類似的排序,然後我們從右端開始迭代,當需要時交換相應的元素- 只有在迭代的任何階段,第一個數組中的元素在列方向上大於第二個數組中的元素時才進行交換;最後,透過該過程獲得最大值的乘積,並將其作為結果列印到輸出控制台。在'main()'中,透過兩個預先存在的陣列傳遞預設值,應用了這個'minimize Product'操作。

结论

通过根据此处详细介绍的方法使用C 程序,可以显著减少两个指定数组中的最大整数值。这种减少是通过熟练的元素交换技术实现的。此外,这种方法有助于更深入地理解数组操作的多种策略---它强调了当个性化函数与预先构建的选项一起使用时如何相互补充。重要的是要记住,确定哪种方法最适合主要取决于每个问题的限制和整体计算潜力。基于这些考虑,重要的是在努力提高编码能力的过程中不要屈服于挫折感。

以上是使用交換最小化兩個數組中最大數的乘積的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除