首页 > 试题广场 > 程序的输出为( )
[单选题]
#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
这个题目的意思是
按数字30的最大公约数大小进行排序的优先队列【按公约数从大到小排序】
上面的太乱了,看下面我这个代码
#include <iostream>
#include <queue>
#include <vector>
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;
}
公约数依次为5--3--2--2--1

发表于 2019-10-08 15:34:14 回复(0)
没太看懂
发表于 2019-10-08 07:41:17 回复(0)