设计一个程序,输出递增序列A中前100个数,序列A满足:
1.数1在序列A中
2.若x在序列A中,则2x,3x也在序列A中
3.序列A中无其它数
解题思路:
priority_queue,greater>优先队列 按照由小到大顺序
priority_queue<int,vector<int>,greater<int>>优先队列 按照由小到大顺序_lethic的专栏-CSDN博客
1入队,1*2=2入队,1*3=3入队,1出队
2*2=4入队,2*3=6入队,2出队
······
使用优先队列,每次将最小元素放到top
每次将队列中最小的元素的倍数入队,入队前判断下是否已经入过队了
代码如下:
#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
int main()
{
int cnt=0;
priority_queue<int,vector<int>,greater<int> > q;//优先队列,小根堆,优先输出最小的元素
q.push(1);
while(cnt!=100)
{
int t=q.top();
q.pop();
printf("%d ",t);
cnt++;
q.push(t*2);
if(t%3==0&&t%2==0) continue;//避免公倍数重复添加
q.push(t*3);
}
return 0;
}
#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
int main()
{
int cnt=0;
priority_queue<int,vector<int>,greater<int> > q;//优先队列,小根堆,优先输出最小的元素
q.push(1);
while(cnt!=100)
{
int t=q.top();
q.pop();
printf("%d ",t);
cnt++;
q.push(t*2);
if(t*3%2==0) continue;//避免公倍数重复添加
q.push(t*3);
}
return 0;
}