透過交換最小化兩個陣列中最大數字的乘積
在現代程式設計和計算中,資料結構操作已成為成功解決方案開發不可或缺的一部分。隨著時間的推移,這些結構的複雜性不斷增加,這就導致了這種情況。一個典型的例子就是執行交換操作以最小化包含在兩個陣列中的最大數字之和;從而降低它們的整體值。在本篇文章中,我們將討論兩種使用 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,直到我們無法再最小化乘積。
方法
現在,讓我們討論兩種不同的方法:
方法 1:使用內建函式
第一種方法涉及使用 C++ 中的內建排序和交換函式。
初始化或輸入兩個陣列。
使用 sort() 函式是一個有用的工具,可以將陣列的內容按升序排列。
查詢兩個陣列中的最大元素(排序後最後的元素)。
如果第一個陣列中的最大元素大於第二個陣列中的最大元素,則使用 swap() 函式交換元素。
繼續執行此過程,直到無法進一步最小化乘積。
示例
#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
解釋
這種方法在執行任務之前使用 #include 指令新增庫。在開始時定義 std 名稱空間簡化了標準庫函式呼叫,避免了冗長的語句。進入 minimizeProduct 函式,其中兩個輸入陣列及其大小是引數。
接下來,它使用內建的 sort() 方法按升序對這些陣列進行排序,然後開始一個 for 迴圈,比較第一個陣列和第二個陣列中的最大元素。
如果第一個陣列中的最大元素大於第二個陣列中的最大元素,則將交換這些元素以更接近解決方案。使用新交換後的最大元素列印乘積。sort() 和 swap() 等內建函式有助於順利完成此操作。在 main() 中呼叫 minimizeProduct() 返回 0 表示成功。
方法 2:不使用內建函式
在無法使用嵌入式函式的情況下,此技術可以產生益處。我們建立自定義變體,而不是求助於預先建立的排序和交換函式。
初始化或輸入兩個陣列。
實現一個排序函式,將兩個陣列按升序排列。
識別兩個陣列中的最大元素(排序後的最後一個元素)。
如果第一個陣列中的最大元素大於第二個陣列中的最大元素,則使用自建的交換函式交換這些元素。
重複此操作,直到不再能減少乘積。
示例
#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
解釋
在另一種方法中,我們放棄內建函式,而採用手動實現排序和交換操作。我們首先編寫一個名為“sortArray”的新函式,該函式使用巢狀 for 迴圈來比較然後將元素交換到所需順序(當傳入陣列作為輸入時)。在“minimizeProduct”中,兩個給定的陣列都經過類似的排序,然後我們從右端開始迭代,並在必要時交換相應的元素——只有當 First Array 中的元素在任何迭代階段都大於 Second Array 中的元素時才交換;最後得到最大值的乘積,此過程完成後,該乘積將作為結果列印到輸出控制檯。在“main()”中,此“minimizeProduct”操作將應用於透過兩個預先存在的陣列傳遞的預設值。
結論
透過根據此處詳述的方法使用 C++ 程式,可以大幅減少兩個指定陣列中的最大整數值。這種減少是透過熟練的元素交換技術實現的。此外,這種方法有助於更深入地理解多種陣列操作策略——它強調了當與預構建選項一起使用時,個性化函式如何巧妙地互補。必須記住,確定哪種方法最合適很大程度上取決於每個問題的設定限制和整體計算能力。鑑於這些考慮,在努力提高編碼能力的過程中,不要灰心喪氣至關重要。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP