uva 136 丑数

题意不再说,这里给出两个开挂一点的无脑做法

1.
直接输出第1500个丑数
cout << "The 1500'th ugly number is 859963392.";

2.
用集合储存丑数,输出第1500个即可。主要是应用了集合中的元素不会重复的原理,不用考虑如何处理重复丑数。
有一点要注意丑数可能超出int范围变成负数,所以调试几下找出了丑数不溢出且能算出第1500个的次数。


#include <iostream>
#include <cstring>
#include <set>
#include <sstream>
#include <cstdio>
using namespace std;

int main()
{
    set<int> dict;
    int t=0;
    dict.insert(1);
    dict.insert(2);
    dict.insert(3);
    dict.insert(5);
    for(set<int>::iterator p=dict.begin();p!=dict.end();p++)
    {
        dict.insert(*p * 2);
        dict.insert(*p * 3);
        dict.insert(*p * 5);
        t++;
        if(t==1300) break;
    }
    t=0;
    cout << "The 1500'th ugly number is ";
    for(set<int>::iterator p=dict.begin();p!=dict.end();p++)
    {
        t++;
        if(t==1500)
        {
            cout << *p;
            break;
        }
    }
    cout << "." <<endl;
    return 0;
}


PS:萌新初学C++ STL 会的不多,所以用计数器控制循环次数来退出循环。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值