四、题目:第几个幸运数字

到x星球旅行的游客都被发给一个整数,作为游客编号。
x星的国王有个怪癖,他只喜欢数字3,5和7。
国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。

我们来看前10个幸运数字是:
3 5 7 9 15 21 25 27 35 45
因而第11个幸运数字是:49

小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。

请你帮小明计算一下,59084709587505是第几个幸运数字。


  • 分析思路:

起初用暴力解法除3,5,7发现没有运行结果,思路是错误的,原因是迭代次数太多
     这道题目类似于素数的筛选

  1. check 试除法(给定1个数字n:1-根号n;能不能整除根号n)
  2. 生成法:筛选
    题中幸运数字3,5,7,9,15,21,25,27,35,45
    3×3=9
    3×5=15
    3×7=21
    3×9=27
    5×5=25
    5×7=35
    5×9=45
    7×7=49
    会发现有重复的3×7=21和7×3=21;
    5×7=35和7×5=35
    生成法:用队列      工具用set
    需要考虑先排序后去重
    C++:用set
    JAVA:用TreeSet
  • 错误代码
#include<iostream>
using namespace std;int main(){LL ans=0;
for(int i=3;i<=MAX;i++){int x=i;while(x%3==0) x/=3;while(x%5==0) x/=5;while(x%7==0) x/7;if(x==1)ans++;
}
cout<<ans<<endl;
}

代码:C++

#include<iostream>
#include<set>
using namespace std;
typedef long long LL;
const LL MAX=59084709587505;
int main(){int a[3]={3,5,7};LL tou=1;//最初队列头部设为1set<LL> s;while(true){//队列头部,完成3个数的插入for(int i=0;i<3;i++){LL tt=tou*a[i]; //分别乘以3,5,7if(tt<=MAX)  //乘出的数小于MAX就存入sets.insert(tt); }tou=*(s.upper_bound(tou));  //新的头部,从set中选择比tou大的最小的数字 if(tou>=MAX)break}cout<<s.size()<<endl;return 0;
}

  • 代码:JAVA
package luckynum;import java.util.TreeSet;public class Luckynum {final static long MAX=59084709587505L;public static void main(String[] args) {int[] a= {3,5,7};long tou=1;TreeSet<Long> s=new TreeSet<Long>();while(true) {for(int i=0;i<3;i++) {long tt=tou*a[i]; //t分别乘以3,5,7if(tt<=MAX)s.add(tt);}tou=s.higher(tou); //从set中选择比tou大的最小数字if(tou>=MAX)break;}System.out.println(s.size());}
}


答案:1905

2018蓝桥杯B组:第几个幸运数字(JAVA/C++)相关推荐

  1. 2018蓝桥杯A组:方格计数(3种方法)

    四.题目:方格计数 如图p1.png所示,在二维平面上有无数个1x1的小方格. 我们以某个小方格的一个顶点为圆心画一个半径为1000的圆. 你能计算出这个圆里有多少个完整的小方格吗? 注意:需要提交的 ...

  2. 2018蓝桥杯B组:猴子分香蕉(C++/JAVA)

    二.题目:猴子分香蕉 5只猴子是好朋友,在海边的椰子树上睡着了.这期间,有商船把一大堆香蕉忘记在沙滩上离去. 第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉. 第2只 ...

  3. 2018蓝桥杯A组:星期一(年份判断)

    二.题目:星期一 整个20世纪(1901年1月1日至2000年12月31之间)一共有多少个星期一? 代码: #include<iostream> using namespace std;b ...

  4. 2018蓝桥杯A组:分数(3种方法 循环累称 快速幂运算 移位运算)

    一.题目:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前2项而 ...

  5. 2020蓝桥杯C-B组模拟赛—有趣的数字

    我们称一个数是质数,而且数位中出现了 5 的数字是有趣的.例如 5, 59, 457都是有趣的,而 15, 7不是.求 1 到 100000 中有趣的数的个数. #include<stdio.h ...

  6. 2018年蓝桥杯A组C/C++决赛题解

    2018年第九届蓝桥杯A组C/C++决赛题解 点击查看视频题解 点击查看2018年蓝桥杯A组C/C++决赛题目(不含答案) 1:三角形面积 画个图,求三角形面积,可以用外接长方形 - 其他多余区域面积 ...

  7. 第九届蓝桥杯JavaA组(2018年)省赛真题解析

    第九届蓝桥杯JavaA组(2018年)省赛真题解析 1.分数 1/1+1/2+1/4+1/8+1/16+- 每项是前一项的一半,如果一共有20项,求这个和是多少 结果用分数表示,类似: 3/2,当然这 ...

  8. 2018 蓝桥杯省赛 B 组模拟赛(一)--封印之门

    题目链接:https://nanti.jisuanke.com/t/A1594 蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以 ...

  9. 2018第九届蓝桥杯JavaB组省赛真题及详解

    2018第九届蓝桥杯JavaB组省赛真题及详解 第一题:第几天 第二题:方格计数 第三题:复数幂 第四题:测试次数 第五题:快速排序 第六题:递增三元组 第七题:螺旋折线 第八题:日志统计 第九题:全 ...

最新文章

  1. 聊天机器人之语料准备
  2. css 命名规范 BEM
  3. 【Python】Pandas基础:结构化数据处理
  4. 彻底搞定C指针-——第五篇:函数参数的传递
  5. 移动安全-iOS(一)
  6. 刷爆抖音,4万好评!这本 Python 3.6 的书又断货了...
  7. 自学python要多久-自学Python需要多长时间?
  8. JAVA输入jdb,解决 JAVA 单步调试键盘输入被 JDB 占用的问题
  9. Java-idea-eclipse-快捷键【mac,win】
  10. 管理感悟:遇到大事极少数人能处理好
  11. 在qemu下实战linux内核
  12. 小工具-FTP文件传输(FlashFXP4.4.2 )
  13. 用手机打开word图表位置很乱_干货 | 论文格式调半天?Word攻略帮你统统都搞定...
  14. java跑酷游戏_HTML5游戏实战(1):50行代码实现正面跑酷游戏
  15. Android开启OTG功能/USB Host API功能
  16. Spring中实现HTTP缓存
  17. 【操作系统】存储模型(二):虚拟存储技术和置换算法
  18. 联想第二季度业绩创纪录 所有业务实现强劲增长
  19. 【论文阅读】The Generals’ Scuttlebutt: Byzantine-Resilient Gossip Protocols
  20. 如何快速上线、部署javaweb项目

热门文章

  1. python和java哪个好学-到底学python好还是学java比较好 哪个容易学习点
  2. python编程入门与案例详解-Pythony运维入门之Socket网络编程详解
  3. python怎么读发音百度翻译-python爬虫--调用百度翻译进行文本翻译
  4. 爬虫python能做什么-Python爬虫能做什么
  5. 离线语音识别技术品鉴——功能不同各有千秋
  6. 科大讯飞离线语音识别安装与运行
  7. React-setState修改状态
  8. cas5.3:CAS Server搭建
  9. android版chrome为什么没有扫,android – 无法使用谷歌条码扫描仪
  10. Vue3.0的有优点有哪些?它比vue2快在哪?