大三时参加过第七届蓝桥杯个人赛及团队赛,转眼已经两年,最近看了看第九届蓝桥杯试题,打算用JavaScript实现一下。

题目1

标题:分数

1/1 + 1/2 + 1/4 + 1/8 + 1/16 + ….
每项是前一项的一半,如果一共有20项,
求这个和是多少,结果用分数表示出来。
类似:3/2 。当然,这只是加了前2项而已。分子分母要求互质。
注意:
需要提交的是已经约分过的分数,中间任何位置不能含有空格。请不要填写任何多余的文字或符号。

解答:

以下讨论不使用数学公式,仅使用JavaScript编程解决的方法。

class Question1 {constructor () {this.result = ''}// 辅助方法->求两个数的最小公倍数lcm (a, b) {const minNum = Math.min(a, b)const maxNum = Math.max(a, b)let temp = 0for (let i = minNum; i <= maxNum; i++) {temp = minNum * iif (temp % maxNum === 0) {return tempbreak}}}// 辅助方法->求两个数的最大公约数gcd (a, b) {const minNum = Math.min(a, b)const maxNum = Math.max(a, b)for (let i = minNum; i > 0; i--) {if (maxNum % i === 0 && minNum % i ===0) {return i}}}// 主方法calculate () {let a = []let numerator = 1let denominator = 1// 将分数推送进二维数组,第一个元素为分子,第二个元素为分母for (let i = 0; i < 20; i++) {a[i] = [numerator, denominator]denominator *= 2}// 求所有分母最小公倍数let lcmResult = 0for (let i = 0; i < a.length; i++) {lcmResult = this.lcm(a[i][0], a[i][1])}// numeratorSum (通分后的分子共和,初始化为0)let numeratorSum = 0// 分子乘以(最小公倍数/分母),分母都变为lcmResult,即:通分for (let i = 0; i < a.length; i++) {a[i][0] *= lcmResult / a[i][1]a[i][1] = lcmResultnumeratorSum += a[i][0]}// 求分子分母最大公约数const gcdResult = this.gcd(numeratorSum, lcmResult)// 计算结果if (gcdResult === 1) {this.result =  numeratorSum + '/' + lcmResult} else {this.result = numeratorSum / gcdResult + '/' + lcmResult / gcdResult}}// 展示结果display () {console.log('结果为:' + this.result)}
}
const obj = new Question1()
obj.calculate()
obj.display()

在node环境执行此js文件,如:node Question1.js,可得到结果为:1048575/524288,如下:

解析请看源码中的注释,请从实例化对象部分(Question1类外)开始阅读。

题目2

标题:星期一

整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一?
以下为本人使用JavaScript解答的源码,相关解释请查看代码中的注释:


// Created by xiaoqiang on 29/05/2018.// 星期一的数目,初始为0
let monday = 0;
// 题目中的年份
for (let year = 1901; year <= 2000; year++) {// 一年十二个月for (let month = 1; month <= 12; month++) {// 某年某月有多少天let day = new Date(year, month, 0).getDate()// 某年某月某日是不是星期一for (let i = 1; i <= day; i++) {if (new Date(year, month - 1, i).getDay() === 1) {monday += 1;}}}
}
console.log('1901年1月1日至2000年12月31日之间星期一的个数是:')
console.log(monday)

使用node运行此js文件,如:node Question2.js,可得到以下结果:

可见运行结果为5217。

题目3

标题:乘积尾零

如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?
5650 4542 3554 473 946 4114 3871 9073 90 4329
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899
1486 5722 3135 1170 4014 5510 5120 729 2880 9019
2049 698 4582 4346 4427 646 9742 7340 1230 7683
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649
6701 6645 1671 5978 2704 9926 295 3125 3878 6785
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074
689 5510 8243 6114 337 4096 8199 7313 3685 211

以下为本人使用JavaScript解答的源码,相关解释代码中的注释:


// Created by xiaoqiang on 29/05/2018.// 创建二维数组
let array =
[[5650, 4542, 3554, 473, 946, 4114, 3871, 9073, 90, 4329],
[2758, 7949, 6113, 5659, 5245, 7432, 3051, 4434, 6704, 3594],
[9937, 1173, 6866, 3397, 4759, 7557, 3070, 2287, 1453, 9899],
[1486, 5722, 3135, 1170, 4014, 5510, 5120, 729, 2880, 9019],
[2049, 698 ,4582, 4346, 427, 646, 9742, 7340, 1230, 7683],
[5693, 7015, 6887, 7381, 4172, 4341, 2909, 2027, 7355, 5649],
[6701, 6645, 1671, 5978, 2704, 9926, 295, 3125, 3878, 6785],
[2066, 4247, 4800, 1578, 6652, 4616, 1113, 6205, 3264, 2915],
[3966, 5291, 2904, 1285, 2193, 1428, 2265, 8730, 9436, 7074],
[689, 5510, 8243, 6114, 337 ,4096, 8199, 7313, 3685, 211]]// 零的总数
let sum = 0
// 元素末尾为2的数量
let endWithTwo = 0
// 元素末尾为5的数量
let endWithFive = 0
for (let i = 0; i < 10; i++) {for (let j = 0; j < 10; j++) {while (array[i][j] % 10 === 0) {// 元素末尾为0,两数乘积末尾必为0,直接加1sum += 1// 减去此元素末尾的一个0array[i][j] /= 10}while (array[i][j] % 2 === 0) {endWithTwo += 1array[i][j] /= 2}while (array[i][j] % 5 === 0) {endWithFive += 1array[i][j] /= 5}}
}
// 元素末尾为2的数量与元素末尾为5的数量比较,取小的,因为多出来那个也没对应的和它相乘,不会产生0。
let select = endWithTwo > endWithFive ? endWithFive : endWithTwo
// 将
sum += select
console.log('乘积的末尾有' + sum + '个零')

使用node运行此js文件,如:node Question3.js,可得到以下结果:

可见结果为:31
有错误欢迎指出,其他题目有空再来解答,晚安。

使用JavaScript解答2018第九届蓝桥杯C/C++省赛A组试题相关推荐

  1. 10届蓝桥杯大赛青少年省赛C++组试题

    2019第十届蓝桥杯大赛青少年创意编程省赛C++组试题解析 [01]水下探测器 水下探测器可以潜入湖中在任意水深进行科学探索.湖水的最大深度为 h 米,即它在湖底时到水面的距离,0<=h< ...

  2. 2018年第九届蓝桥杯【C++省赛B组】【第三题:乘积尾零】——附解题代码

    欢迎大家加入CSDN-蓝桥杯竞赛社区 https://bbs.csdn.net/forums/lanqiaobei 蓝桥杯历届题目及解析汇总(附思路及代码)[点击此进入] 蓝桥杯,ACM算法学习[文档 ...

  3. 2018年第九届蓝桥杯【C++省赛B组】【第一题:第几天】

    欢迎大家加入CSDN-蓝桥杯竞赛社区 https://bbs.csdn.net/forums/lanqiaobei 蓝桥杯历届题目及解析汇总(附思路及代码)[点击此进入] 蓝桥杯,ACM算法学习[文档 ...

  4. 2018年第九届蓝桥杯【C++省赛B组】【第八题:日志统计】尺取法

    题目描述 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞". ...

  5. 2018年第九届蓝桥杯【C++省赛B组】【第六题:递增三元组】——二分解法

    题目描述 给定三个整数数组 A = [A1, A2, - AN], B = [B1, B2, - BN], C = [C1, C2, - CN], 请你统计有多少个三元组(i, j, k) 满足: 1 ...

  6. 测试次数----2018年第九届蓝桥杯C/C++省赛B组 第四题

    题目描述 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市 ...

  7. 『蓝桥杯』2018年第九届蓝桥杯【C++省赛B组】【第二题:明码】——附解题代码

  8. 2018第九届蓝桥杯大赛总决赛(软件类)试题 B组

    文章目录 标题:换零钞 标题:激光样式 标题:格雷码 标题:调手表 标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便 ...

  9. 2018省赛第九届蓝桥杯真题C语言B组第十题题解 乘积最大

    2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:乘积最大 给定N个整数A1, A2, ... AN.请你从中选出K个数,使其乘积最大.   请你求出最大的乘积,由于乘积可能超出整型范围,你只 ...

最新文章

  1. 孟宪会老师推荐的一部C#图解教程
  2. 喵哈哈村的狼人杀大战(4)
  3. 安卓开发37:自定义的HorizontalScrollView类,使其pageScroll的时候焦点不选中
  4. 删除Add-On表字段后不能激活
  5. Struts2的核心文件
  6. SAP Spartacus build error之后的retrigger方式
  7. zabbix3.2监控
  8. Qt 调用Python引擎混合编程
  9. 深入理解Angular订阅者模式
  10. Java同步—线程池的创建和使用
  11. python qt5 数据改变 触发信号_pyqt5自定义信号实例解析
  12. 《A Tour of PostgreSQL Internals》学习笔记——进程间通信
  13. 百度云文章的链接地址抓取工具
  14. 配置计算机老是重启,电脑总是自动重启该怎么解决
  15. iOS8设置应用图标红点的权限问题
  16. CMFCPropertyGridCtrl 的简单教程
  17. element引入的组件大小高度不对_ElementUI 在 按需引入时定义 default size?
  18. SQL Server 2008 R2 学习总结
  19. Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization”
  20. scrapy简单示例

热门文章

  1. MySQL缓存的查询和清除命令使用详解
  2. centos6.8安装node
  3. UriComponentsBuilder和UriComponents url编码
  4. linux ssh 报错failed - POSSIBLE BREAK-IN ATTEMPT
  5. jmeter之关联操作
  6. 20165105第三周学习总结
  7. Win7下Solr4.10.1和TomCat8的安装
  8. 如何结合SharePoint Designer 2010 与Visio 2010 创建工作流?
  9. msyql show命令(转)
  10. 有关AutoCompleteBox组件的研究[5][Final]_集成搜索引擎搜索建议(Search Suggestion)——Silverlight学习笔记[40]...