STL实现Ugly Numbers 注解

来源:互联网 发布:唯品会下单软件 编辑:程序博客网 时间:2024/06/06 13:17

从阅读大佬的代码开始..

对于我这个弱渣来说,都是精华..

以下是对f_zyj大佬模板中提供的STL实现Ugly Numbers 学习和注解

f_zyj大佬的博客:

http://blog.csdn.net/f_zyj/article/details/51594851

地址为pdf中第9页

#include <iostream>#include <queue>#include <functional>//greater模板所在头文件,大佬没写..using namespace std;typedef pair<unsigned long, int>node_type;//大佬这里用了unsigned long,我以前知道但是从来没有用过//于是百度了一下,发现在正整数范围内竟然比int大一半..//记住之!int main(){unsigned long result[1505];priority_queue<node_type, vector<node_type>, greater<node_type>>Q;//使用优先队列,每次拿出最小的数,并以此推演Q.push(make_pair(1, 2));for (int i = 0; i < 1500; ++i){node_type node = Q.top();Q.pop();//这个switch第一眼我是懵逼的...仔细一看发现少了break语句,恍然大悟,这个东西还可以这么玩..switch (node.second)//每次用最小的数以2,3,5作为因子进行推演,保证不重复.{case 2:Q.push(make_pair(node.first * 2, 2));case 3:Q.push(make_pair(node.first * 3, 3));case 5:Q.push(make_pair(node.first * 5, 5));}result[i] = node.first;}int n;cin >> n;//这里的循环输入和我平时的写法不一样,不过没有明白为什么..下次留意一下吧..while (n > 0){cout << result[n - 1] << '\n';//这里..我一般是用endl,但是想想看,还是'\n'省时间..大佬的细节啊..cin >> n;}return 0;}


0 0