C++程序,用于查找二价拍卖活动中的赢家和最终价格


假设我们有一个包含n个元素的数组A。有一种特殊的拍卖类型,称为二价拍卖。在常规拍卖中,n个竞拍者进行竞价,竞价是竞拍者愿意支付的价格。拍卖结束时,每个竞拍者都会秘密告知拍卖组织者他们愿意支付的价格。之后,拍卖赢家是出价最高者。但在这里,他支付的不是他提供的价格,而是其他参与者报价中的最高价格(二价拍卖)。A[i] 是第 i 个竞拍者提供的价格。我们必须找到赢家以及他将支付的价格。所有提供的价格都是唯一的。

问题类别

数据结构中的数组是特定类型元素的有限集合。数组用于在连续的内存位置存储相同类型的元素。数组被分配一个特定的名称,并在各种编程语言中通过该名称进行引用。要访问数组的元素,需要索引。我们使用术语“name[i]”来访问数组“name”中位置“i”处的特定元素。各种数据结构,如栈、队列、堆、优先级队列,都可以使用数组实现。数组上的操作包括插入、删除、更新、遍历、搜索和排序操作。访问下面的链接以了解更多信息。

https://tutorialspoint.com/data_structures_algorithms/array_data_structure.htm

因此,如果我们问题的输入类似于 A = [3, 8, 2, 9, 4, 14],则输出将是 5, 9,因为赢家在索引 5 处,提供的价格为 14,他将支付 9。

步骤

为了解决这个问题,我们将遵循以下步骤:

n := size of A
i := index of the maximum element in A
sort the array A
l := A[n - 2]
print i and l

示例

让我们看看以下实现以更好地理解:

#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A){
   int n = A.size();
   int i = max_element(A.begin(), A.end()) - A.begin();
   sort(A.begin(), A.end());
   int l = A[n - 2];
   cout << i << ", " << l;
}
int main(){
   vector<int> A = { 3, 8, 2, 9, 4, 14 };
   solve(A);
}

输入

{ 3, 8, 2, 9, 4, 14 }

输出

5, 9

更新于: 2022年4月7日

254 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告