首页 > 试题广场 >

#includeusing&nb...

[单选题]
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
struct stsort{
bool operator () (const int a, const int b) const{
if(gcd(30, a) < gcd(30, b)){
return 1;
}
else if(gcd(30, a) == gcd(30, b)){
return a < b;
}
else return 0;
}
};
int main(){
int n = 5;
priority_queue<int, vector<int>, stsort>q;
for(int i = 1; i <= n; ++i){
q.push(i);
}
for(int i = 1; i <= n; ++i){
printf("%d", q.top());
q.pop();
}
return 0;
}
程序的输出为( )
  • 53421
  • 53241
  • 12435
  • 14235
gcd函数是辗转相除法(欧几里得算法),求最大公约数。
stsort 比较算法,此例中的结果是a<b 返回1(大顶堆), 否则返回0
priority_queue 优先队列,最高级先出。大顶堆是数值越大,优先级越高,所以结果是5,4,3,2,1

发表于 2019-09-17 12:35:50 回复(0)
qsort是个仿函数这个函数是为了优先级排序用的排序依据为与30的最大公约数的大小,5(5),3(3),4(2),2(2),1(1).
优先队列中从头到尾优先级逐渐降低。gcd这个是求最大公约数的算法。ok?关于仿函数请自行百度,这个函数主要是为了适配容器而存在的。
发表于 2019-10-13 12:28:44 回复(0)
没看懂,有人能解释一下吗
发表于 2019-08-28 12:07:55 回复(1)