Zcmu-1178

image
image


思路:

  1. 分析题目要求的就是由2,3,5,7单独相乘或者组合相乘的数字。
  2. 所以将数字循环起来相乘,之后结果按从大到小地无重复放进数组当中。

学长

#include<set> 
#include<queue>
#include<vector>
#include<cstdio>
using namespace std;
typedef long long ll;
int num[4]={2,3,5,7};
//set,封装了二叉树(红黑树),没有重复元素 
set<ll> s;
//优先队列 :数据类型,容器类型,比较方式(这里是升序,建堆) 
priority_queue<ll,vector<ll>,greater<ll> > q;
vector<ll> v;
void init(){
    s.insert(1);
    q.push(1);
    /*由题目可知一系列数,就是2,3,5,7相乘的情况
	所以程序模拟相乘就行了*/ 
    for(int j=1;j<=5842;j++){
    	//可知最多是5842个 
        ll a=q.top();
        q.pop();
        v.push_back(a);//队列当中直接收 
        for(int i=0;i<4;i++){
            ll b=a*num[i];
            if(!q.count(b)){
            	//要保证前面没有 
                s.insert(b);
                q.push(b);
            }
        }
    }
}
int main(){
    init();
    int n;
    while(scanf("%d",&n)!=EOF){
        printf("%lld\n",v[n-1]);
    }
    return 0;
}
posted @ 2024-06-03 14:04  海&贼  阅读(28)  评论(0)    收藏  举报