使用 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