首頁 > 後端開發 > C++ > 主體

重新排列一個數組,以使連續一對元素的乘積總和最小,並使用C++編寫

PHPz
發布: 2023-08-26 10:57:06
轉載
1065 人瀏覽過

重新排列一個數組,以使連續一對元素的乘積總和最小,並使用C++編寫

我們有一個正整數型別的數組,假設是arr[],大小任意。任務是重新排列數組,使得當我們將一個元素與其相鄰元素相乘,然後將所有結果元素相加時,會傳回最小的和。

讓我們來看看不同的輸入輸出狀況:

輸入 - int arr[] = {2, 5, 1, 7, 5, 0, 1, 0}

輸出 - 重新排列陣列以最小化和,即連續一對元素的乘積為:7 0 5 0 5 1 2 1

#解釋 - 我們有一個大小為8的整數陣列。現在,我們將重新排列數組,即7 0 5 0 5 1 2 1。我們將檢查是否回傳最小和,即7 * 0 5 * 0 5 * 1 2 * 1 = 0 0 5 2 = 7。

輸入 - int arr[] = {1, 3, 7, 2, 4, 3}

輸出 - 重新排列陣列以最小化和,即連續一對元素的乘積為:7 1 4 2 3 3

#解釋 - 我們有一個大小為6的整數陣列。現在,我們將重新排列數組,即7 1 4 2 3 3。我們將檢查是否回傳最小和,即7 * 1 4 * 2 3 * 3 = 7 8 9 = 24。

下面程式中使用的方法如下:

  • 輸入一個整數類型的陣列並計算陣列的大小。

  • 使用C STL的sort方法對陣列進行排序,將陣列和陣列的大小傳遞給sort函數。

  • 宣告一個整數變量,並將其設定為呼叫函數的回傳值。

# Rearrange_min_sum(arr, size)
  • Inside the function Rearrange_min_sum(arr, size)

    • Create a variable, let's say, 'even' and 'odd' type of type vector which stores integer variables.

    • #Declare a variable as temp and total and initialise it with 0.

    • #StartStart loop FOR from i to 0 till i less than size. Inside the loop, check IF i is less than size/2 then push arr[i] to odd vector ELSE, push arr[i] to even vector

    • #Call the sort method by passing even.begin(), even.end() and greater().

    • Start loop FOR from i to 0 till i less than even.size(). Inside the loop, set arr[temp ] to even[j], arr[temp ] to odd[j] and total to total even[j] * odd[j]

    • Return total

  • #Print the result.

  • Example

    #include <bits/stdc++.h>
    using namespace std;
    int Rearrange_min_sum(int arr[], int size){
       vector<int> even, odd;
       int temp = 0;
       int total = 0;
       for(int i = 0; i < size; i++){
          if (i < size/2){
             odd.push_back(arr[i]);
          }
          else{
             even.push_back(arr[i]);
          }
       }
       sort(even.begin(), even.end(), greater<int>());
       for(int j = 0; j < even.size(); j++){
          arr[temp++] = even[j];
          arr[temp++] = odd[j];
          total += even[j] * odd[j];
       }
       return total;
    }
    int main(){
       int arr[] = { 2, 5, 1, 7, 5, 0, 1, 0};
       int size = sizeof(arr)/sizeof(arr[0]);
       //sort an array
       sort(arr, arr + size);
       //call function
       int total = Rearrange_min_sum(arr, size);
       cout<<"Rearrangement of an array to minimize sum i.e. "<<total<<" of product of consecutive pair elements is: ";
       for(int i = 0; i < size; i++){
          cout << arr[i] << " ";
       }
       return 0;
    }
    登入後複製

    輸出

    如果我們執行上面的程式碼,它將產生以下輸出

    Rearrangement of an array to minimize sum i.e. 7 of product of consecutive pair elements is: 7 0 5 0 5 1 2 1
    登入後複製

    以上是重新排列一個數組,以使連續一對元素的乘積總和最小,並使用C++編寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:tutorialspoint.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板