使用 C++ 中的给定操作将数组缩减为单个整数

给定一个整数变量 Number 作为输入。让我们考虑一个包含 1 到 Number 范围内任意顺序元素的数组。如果我们对数组执行 Number-1 次操作,使得

  • 我们从数组中选择两个元素 A 和 B

  • 从数组中删除 A 和 B

  • 将 A 和 B 的平方和添加到数组中

我们最终会得到一个整数值;目标是找到该元素的最大可能值。

使用优先队列

  • 为了使最终结果最大化,我们必须选择 A 和 B 使它们最大。

  • 为了找到最大值 A 和 B,我们将使用一个优先级队列来存储其中元素的值。

  • 优先级队列以降序存储元素。

  • 最顶层元素的值最大,依此类推。因此,在弹出两个元素后,我们将再次将它们的方块推入队列。

  • 将弹出并按下 Number - 1 次以获得所需的结果。

例子

输入 - 数字=2

输出 - 数组缩减后的单个元素:5

说明 - 假设我们将数组中的元素设为 [ 1 2]

插入优先队列后-:2 1

A=5, B=4 : A 2 +B 2 =1+4=5

最后一个元素:5

输入 - 数字=5

输出 - 数组缩减后的单个元素:5

说明- 假设我们将数组中的元素设为 [ 5 1 2 4 3]

插入优先队列后-:5 4 3 2 1

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

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

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

A=2856104 , B=1 : A 2 +B 2 =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<<"数组缩减后的单个元素: "<<reduceArray(Number);

   return 0;

}

输出结果

如果我们运行上面的代码,它将生成以下输出

数组缩减后的单个元素: 1187163713

以上是 使用 C++ 中的给定操作将数组缩减为单个整数 的全部内容, 来源链接: utcz.com/z/317233.html

回到顶部