使用 C++ 將陣列透過給定操作減少到單個整數


給定一個整數變數 Number 作為輸入。讓我們考慮一個數組,其中包含範圍從 1 到 Number 的元素(以任何順序)。如果我們對陣列執行 Number-1 次操作,使得

  • 我們從陣列中選擇兩個元素 A 和 B

  • 從陣列中移除 A 和 B

  • 將 A 和 B 的平方和新增到陣列中

最終我們將得到一個單個整數;目標是找到該元素的最大可能值。

使用優先佇列

  • 為了最大化最終結果,我們將不得不選擇 A 和 B,使得它們最大。

  • 為了找到最大 A 和 B,我們將使用優先佇列來儲存元素的值。

  • 優先佇列按降序儲存元素。

  • 最頂部的元素值最大,依此類推。因此,在彈出兩個元素後,我們將再次將其平方推入佇列。

  • 我們將彈出和推入 Number - 1 次以獲得期望的結果。

示例

輸入 - Number=2

輸出 - 陣列縮減後的單個元素:5

解釋 - 假設陣列中的元素為 [ 1 2]

插入優先佇列後:2 1

A=5, B=4 : A2+B2=1+4=5

最後一個元素:5

輸入 - Number=5

輸出 - 陣列縮減後的單個元素:5

解釋 - 假設陣列中的元素為 [ 5 1 2 4 3]

插入優先佇列後:5 4 3 2 1

A=5, B=4 : A2+B2=25+16=41 : 41 3 2 1

A=41, B=3 : A2+B2=1681+9=1690 : 1690 2 1

A=1690, B=2 : A2+B2=1681+4=2856104 : 2856104 1

A=2856104 , B=1 : A2+B2=1187163712+1=1187163713 : 1187163713

最後一個元素:1187163713

下面程式中使用的方案如下

在此方案中,我們將優先考慮佇列以按降序儲存陣列的元素。彈出兩個最大的元素,並將兩者的平方和再次推入該佇列。重複此操作,直到只剩下一個值。

  • 獲取輸入變數 Number。

  • 將結果的資料型別設定為長長整數 - lli

  • 函式 reduceArray(int Num) 獲取輸入數字並返回使用上述操作計算的最大單個整數。

  • 將優先佇列作為 pQueue。

  • 使用 while 迴圈用數字 1 到 N 填充 pQueue。

  • 當 i<=Num 時,將 i 推入 pQueue

  • 現在 pQueue 以降序包含整數 1 到 N,大小為 N。

  • 現在使用 while 迴圈遍歷 pQueue,直到其大小 >=1。

  • 將最大值作為 var1=pQueue.top() 並彈出它。

  • 將下一個最大值作為 var2=pQueue.top() 並彈出它。

  • 將 var1 設定為其平方,將 var2 設定為其平方。

  • 將 var1+var2 再次推入 pQueue。

  • 在 while 迴圈結束時,返回頂部元素。

  • 在 main 中列印結果。

示例

#include <bits/stdc++.h>
using namespace std;
#define lli long long int
int reduceArray(int Num){
   priority_queue<lli> pQueue;
   int i=1;
   while(i<=Num){
      pQueue.push(i);
      i=i+1;
   }
   while (pQueue.size() > 1) {
      lli var1 = pQueue.top();
      pQueue.pop();
      lli var2 = pQueue.top();
      pQueue.pop();
      var1=var1*var1;
      var2=var2*var2;
      pQueue.push(var1+var2);
   }
   return pQueue.top();
}
int main(){
   int Number = 5;
   cout<<"Single element after array reduction: "<<reduceArray(Number);
   return 0;
}

輸出

如果我們執行上述程式碼,它將生成以下輸出

Single element after array reduction: 1187163713

更新於: 2021 年 11 月 3 日

164 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.